我的代码将数组索引随机化,例如,该索引由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()
。