我试图得到一个像这样的随机数组
srand((float) microtime() * 10000000);
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
如果我有$rand_keys = array_rand($input, 2);$rand_keys = array_rand($input, 5);
,它会随机显示2个数字但由于我希望所有5个数字显示它不起作用。什么造成的。我需要使用array_rand。感谢
答案 0 :(得分:2)
array_rand
按照原始数组中存在的顺序对键进行排序。如果您想要一个混洗数组,请先使用shuffle
函数:
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
shuffle($input);
$rand_keys = array_rand($input, 5);
for ($i = 0; $i < count($rand_keys); $i++) {
echo $input[$rand_keys[$i]] . "\n";
}
当然,如果您访问所有五个,则根本不需要调用array_rand
,但如果您改变其第二个参数,这仍然有效。
顺便说一句,调用srand
函数是不必要的 - 从PHP 4.2开始就为你完成。
答案 1 :(得分:0)
此功能的更改日志:
5.2.10 The resulting array of keys is no longer shuffled.
此函数不以随机顺序返回元素,它返回随机元素。 因此,如果您想从数组中获取5个随机元素,它只会为您提供所有元素。
答案 2 :(得分:0)
我假设你不想在原始数组上使用shuffle,因为它会重新排列键?如果是这样,那么只需用随机键对数组进行洗牌,保持输入数组不变。
$rand_keys = array_rand($input, 5);
shuffle($rand_keys);
print_r($rand_keys);
/**
* Sample output
Array
(
[0] => 0
[1] => 1
[2] => 4
[3] => 2
[4] => 3
)
*/