从PHP列表中选择随机唯一字符串


Select Random Unique String From List in PHP

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

也必须在循环中完成,这就是为什么我在下面使用for循环。

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

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

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

$colors= array('blue', 'green', 'yellow', 'purple', 'white');
for($i = 1; $i <=5; $i++){
echo $colors[array_rand($colors)];
}
$colors = array('blue', 'green', 'yellow', 'purple', 'white');
$colors = array_unique($colors);
shuffle($colors);
foreach($colors as $color)
  echo $color."'n";

您可以在PHP中使用array_unique

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

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

您可以尝试复制数组,然后打乱复制,最后弹出结果。

例如:

$array = array('blue','green','yellow','purple');
$copy = $array;
shuffle($copy);
while(!empty($copy)){
    echo array_pop($copy);
}

来自PHP.net的注意:5.2.10生成的键数组不再被打乱。所以像我说的,不能再用array_rand()了。你可以使用:

<?php
    $colors = array('blue', 'green', 'yellow', 'purple', 'white');    
    shuffle($colors);
    foreach ($colors as $shuffledColor) {
        echo $shuffledColor . "'n";
    }
?>