从数组中随机选择3个不同的值

36

我有一个包含30个值的数组,我需要从这个数组中提取3个不同的随机值。我该怎么做?


可能是重复的问题:从数组中获取随机值的子集php - kennytm
3个回答

35

我不确定为什么要使用array_rand(),因为这似乎没有理由多调用一个函数。只需使用shuffle()然后选择前三个元素即可:

shuffle($array);
print_r(array_slice($array, 0, 3));

1
非常干净,这应该是一个被接受的答案。 - Vladimir Hraban
1
如果$array非常大,这里可能会存在性能问题。 - yunzen
1
@yunzen - 我对已接受的答案进行了一些基准测试,我同意array_slice()在非常大的数组上要慢得多。尽管如此,即使有1,000,000个键,它也只需要0.124秒,而array_rand()只需要0.004秒。对于大多数情况来说,这并不重要,但知道这一点很好! - But those new buttons though..

28
不要脸地从PHP手册上偷来的:
<?php
$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";
?>

https://www.php.net/array_rand

请注意,从PHP 5.2.10开始,您可能希望通过shuffle($rand_keys)来随机排列返回的键,否则它们将始终按顺序排列(最小索引优先)。也就是说,在上面的示例中,您可能会得到"Neo, Trinity",但永远不会得到"Trinity, Neo"。
如果随机元素的顺序不重要,那么上述代码就足够了。

4

使用shuffle($array)方法,然后再使用array_rand($array,3)方法。


你为什么要调用 shuffle 函数? - user142162
2
只是为了确保它真的很随机 :) ... 其背后的原因是去年使用 array_rand 函数时,我发现结果不太随机(连续运行出现相似的项),因此为了使它更加随机,我会先对数组进行洗牌,然后再将其传递给 array_rand 函数,这似乎可以提供更随机的值。 - Sabeen Malik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接