这是我的代码。我不明白为什么我会无休止地循环。 我认为当我为我的数组创建唯一的随机值时,$ check必须停止循环。
<?php
$foo["blue"] = 0;
$foo["black"] = 0;
$foo["red"] = 0;
$foo["white"] = 0;
$check;
do
{
foreach($foo as &$val)
{
$val = rand(1,6);
}
$foo = array_unique($foo);
$check = count($foo);
}
while($check != 4);
echo '............................ <br>';
foreach($foo as $key=>$value)
{
echo $key . ' ' . $value . '<br>';
}
?>
答案 0 :(得分:1)
问题是第一次循环时有一些重复,所以array_unique()
将数组从4个元素减少到1,2或3. foreach
循环永远不能生成数组再次变大,因为它只循环遍历数组中当前存在的元素。因此,一旦数组缩小,它将永远不会增长回4个元素,$check != 4
将始终为真。
你应该获得数组的原始密钥并使用它。
<?php
$foo["blue"] = 0;
$foo["black"] = 0;
$foo["red"] = 0;
$foo["white"] = 0;
$keys = array_keys($foo);
$check;
do
{
foreach($keys as $i)
{
$foo[$i] = rand(1,6);
}
$foo = array_unique($foo);
$check = count($foo);
}
while($check != 4);
echo '............................ <br>';
foreach($foo as $key=>$value)
{
echo $key . ' ' . $value . '<br>';
}
?>
答案 1 :(得分:0)
就个人而言,我不会在具有如此低熵的循环中进行,因为它可能需要一整天才能最终匹配随机集。
更好的方法是生成一个范围并随机化,然后循环遍历数组并设置值。
<?php
$rand = range(1, 6);
shuffle($rand);
$foo["blue"] = 0;
$foo["black"] = 0;
$foo["red"] = 0;
$foo["white"] = 0;
$i=0;
foreach ($foo as $key => $value) {
$foo[$key] = $rand[$i];
$i++;
}
print_r($foo);
/*Array
(
[blue] => 1
[black] => 3
[red] => 2
[white] => 5
)
*/