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

时间:2013-11-23 14:45:02

标签: php

我的代码随机化了一个数组索引,例如包含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次这样的功能,看它是不是巧合。

2 个答案:

答案 0 :(得分:3)

array_rand()根据文件...

  

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

文档中没有提及它随机选择随机选择的键的顺序。你显然想要的是shuffle()

所以尝试这样的事情:

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

答案 1 :(得分:2)

这不是错误。

从5.2.10开始,PHP不再对提取的密钥进行随机播放,它们总是被排序。

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

4! / (2! * 2!)

这与您预期的12:

相反
4! / 2!

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

我的建议是改用shuffle()