我如何将两个随机选择的阵列与之前的选择进行比较?

How do I compare two randomly picked arrays with earlier picks?

我正在尝试创建一个扑克牌版本,其中程序会向每位玩家分发 2 张牌(其中 6 张)。我想出了一个程序,可以为每个玩家随机挑选一张牌,但问题是有时,2 个玩家会得到同一张牌。我尝试解决这个问题的方法是根据数组中的卡片位置 + 循环值给每个循环一个不同的值,然后将它与之前的循环进行比较,但没有任何成功...

这是我目前的 "working" 程序:

<?php

$colour = array('Heart', 'Diamonds', 'Spades', 'Clubs');
$card = array('Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King');

for($i=1; $i<=6;$i++)
{

$m = 0;
$n = 0;

$random1 = array_rand($card);
echo $card[$random1];
$m = $card[$random1];

$random2 = array_rand($colour);
echo " ". $colour[$random2];
$n = $colour[$random2];

}
?>

我该如何继续?有更简单的方法吗?

$Cards=array();

while(count($Cards)<(2*6)){    
    $colour = array('Heart', 'Diamonds', 'Spades', 'Clubs');
    $card = array('Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen');

    shuffle($card);
    $m = array_shift($card);

    shuffle($colour);
    $n = array_shift($colour);

    echo $card = $m."/".$n;
    $Cards[$card]=$card;
    echo '<br>';
}
$Cards=array_values($Cards);

echo '<pre>';
var_export($Cards);#2 unique cards for each player in array

一条路。

你总是可以像一副真正的纸牌那样做它,而不是两个数组,一个数组,包含每套花色中 A-K 的所有牌

例如

$cards = array('AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H',
               'TH', 'JH', 'QH', 'KH', 'AD', '2D', '3D', '4D', '5D',
               '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD', 'AC',
               '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC',
               'JC', 'QC', 'KC', 'AS', '2S', '3S', '4S', '5S', '6S',
               '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS');

// then the appropriately named... 

shuffle($cards);

// then "deal" the cards by looping through the array from the beginning!

$i = 0; 

for ($player = 0; $player < 6; $player ++) {
   echo "<br />Player $player : Card 1 = " . $cards[$i++];
   echo " Card 2 = " . $cards[$i++];
}

您可以有一个单独的函数来将 "AH"、“9S”等翻译成卡片的实际名称,或者在创建数组时实际设置它们的显示名称。