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

问题描述:

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

+0

可能重复http://stackoverflow.com/questions/3504401/get-a-subset-of -random-values-from-an-array-php) – kennytm 2010-10-15 20:13:26

从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"; 
?> 

http://us2.php.net/array_rand

需要注意的是,由于PHP 5.2.10,你可能要重新洗牌(随机)的通过shuffle($rand_keys)返回的密钥,否则它们将始终按顺序(最小索引第一)。也就是说,在上面的例子中,你可以得到“三位一体”,但从来没有“三位一体,新生”。

如果随机元素的顺序不重要,那么上面的代码就足够了。

使用shuffle($array)然后array_rand($array,3)

+0

你叫'shuffle'的任何特定原因? – 2010-10-15 20:16:15

+2

只是为了确保它真正随机:) ..背后的历史是,去年使用array_rand我看到不是如此随机的结果(连续运行中的类似项目),所以使它更随机一点我会首先洗牌数组,然后提供给array_rand函数,它似乎给了更多的随机值。 – 2010-10-15 20:18:05

+0

你仍然需要从键到值.... – 2015-10-26 12:46:16

我不确定为什么要打扰使用array_rand(),因为它只是一个看似没有理由的额外函数调用。简单地shuffle(),切片前三个元素:

shuffle($array); 
print_r(array_slice($array, 0, 3)); 
的[从阵列获取的PHP随机值的子集(
+0

更清洁,这应该是一个公认的答案 – 2016-08-24 12:03:13