我正在尝试制作纸牌游戏。 我有6个存储在数组中的变量。比我使用fisherYates方法随机化数组,并显示其中的四个。 问题是,当我以这种方式随机化它时,它将只给出这六种随机输出,具有所有不同类型。 所以我想要一些重复,如果你画四张牌,你得到的输出 例如:俱乐部,俱乐部,钻石,心脏或心脏,明星,明星,心脏......如果你得到一点...... 我想这样做:将数组放入4次循环中,每次循环时,它都会在新数组中存储第一个或最后一个值,这样我就可以更有机会将相同的卡组合在一起输出数组。 但是我被困了,我不知道怎么做:/
这是我迄今为止尝试过的事情
$diamond = 'cube.jpg';
$heart = 'heart.jpg';
$spade = 'spade.jpg';
$club = 'tref.jpg';
$star='star.jpg';
$qmark='qmark.jpg';
$time=microtime(35);
$arr=[$diamond,$heart,$spade,$club,$star,$qmark];
function fisherYatesShuffle(&$items, $time)
{
for ($i = count($items) - 1; $i > 0; $i--)
{
$j = @mt_rand(0, $i);
$tmp = $items[$i];
$items[$i] = $items[$j];
$items[$j] = $tmp;
}
return $items;
}
$i=0;
do {
$niz[$i]=fisherYatesShuffle($arr,$time);
reset($niz);
$i++;
} while ($i <= 3);
答案 0 :(得分:0)
有一个解决方案。只是简单地做多维数组的第一个元素的foreach :) 代码是这样的:
$diamond = 'cube.jpg';
$heart = 'heart.jpg';
$spade = 'spade.jpg';
$club = 'tref.jpg';
$star='star.jpg';
$qmark='qmark.jpg';
$time=microtime(35);
$arr=[$diamond,$heart,$spade,$club,$star,$qmark];
$niz=array();
$i=0;
do {
$niz[$i]=fisherYatesShuffle($arr,$time);
//reset($niz);
$i++;
} while ($i <= 3);
foreach ($niz as $key ) {
$randomArr[]=$key[0]; ;
}
function fisherYatesShuffle(&$items, $time)
{
for ($i = count($items) - 1; $i > 0; $i--)
{
$j = @mt_rand(0, $i);
$tmp = $items[$i];
$items[$i] = $items[$j];
$items[$j] = $tmp;
}
return $items;
}
print_r($randomArr);