2

我想回显将从列表中选择的颜色,但它们必须是唯一的。我通常知道如何生成独特的东西,但如果有适当的列表,我不知道如何做到这一点。

它也必须在循环中执行此操作,这就是我在下面使用 for 循环执行此操作的原因。

例如,在开始时,假设数组有 5 个元素,在第一个循环中它将选择蓝色并回显,在回显蓝色之后,在第二个循环中,将有 4 个选项,它将回显剩余的一个四个元素随机,蓝色不会出现在选项中。

例如,在我的目的中,它必须生成如下:蓝 - 白 - 绿 - 黄 - 紫(唯一)

错误的是:蓝色-蓝色-绿色-黄色-紫色(不是唯一的)

$colors= array('blue', 'green', 'yellow', 'purple', 'white');
for($i = 1; $i <=5; $i++){
echo $colors[array_rand($colors)];
}
4

4 回答 4

3
$colors = array('blue', 'green', 'yellow', 'purple', 'white');
$colors = array_unique($colors);
shuffle($colors);
foreach($colors as $color)
  echo $color."\n";
于 2013-06-14T02:46:56.460 回答
1

您可以array_unique在 PHP 中使用。

例如,如果您按如下方式生成数组。

$array = array('blue','blue','green','yellow','purple');
$out = array_unique($array);

//will product
//array('blue', 'green', 'yellow', 'purple');
于 2013-06-14T02:46:46.873 回答
0

来自 PHP.net 的注释:5.2.10 生成的键数组不再被打乱。所以array_rand()就像我说的那样不再可能使用。相反,您可以使用:

<?php
    $colors = array('blue', 'green', 'yellow', 'purple', 'white');    
    shuffle($colors);

    foreach ($colors as $shuffledColor) {
        echo $shuffledColor . "\n";
    }
?>
于 2013-06-14T02:57:12.140 回答
0

您可以尝试复制数组,然后改组副本,最后弹出结果。

例如:

$array = array('blue','green','yellow','purple');
$copy = $array;
shuffle($copy);
while(!empty($copy)){
    echo array_pop($copy);
}
于 2013-06-14T03:00:51.773 回答