当随机化超过1个随机arraykey时,PHP array_rand无法正常工作


PHP array_rand not working properly when randomizing more then 1 random arraykey

我的代码将数组索引随机化,例如,该索引由3个值组成。

$t1 = array("6","7","8");    
$randomized = array_rand($t1, 3);
echo $t1[$randomized[0]]; 

仅输出值6。

$randomized = array_rand($t1, 2);
echo $t1[$randomized[0]];

仅输出值6或7。

然而,这是有效的:

    $randomized = array_rand($t1, 1);
    echo $t1[$randomized]; 

它工作并输出6,7或8

我不明白,是的,我确实执行了大约10次函数,看看这是否只是巧合。

array_rand()根据文档。。。

从数组中选择一个或多个随机条目,并返回随机条目的关键字。

文档中没有提到它将随机选择的密钥的顺序随机化。你显然想要的是shuffle()

所以试试这样的东西:

$t1 = array("6","7","8");
$randomized = array_rand($t1, 3);
shuffle($randomized);
echo $t1[$randomized[0]]; 

这不是一个bug

从5.2.10开始,PHP不再打乱提取的密钥,它们总是有序的。

由于这种排序,从包含4个值的数组中提取2个密钥只能通过6种方式完成:

4! / (2! * 2!)

这与您预期的12:相反

4! / 2!

因此,从数组中提取所有密钥只能用一种方式完成,从而有效地产生array_keys($array)

我的建议是使用shuffle()