如何从PHP中的数组中选择随机值?

问题描述:

我有一个PHP中的对象数组。我需要随机选择其中的8个。我最初的想法是使用array_rand(array_flip($my_array), 8)但这不起作用,因为对象不能作为数组的键。如何从PHP中的数组中选择随机值?

我知道我可以使用shuffle,但是我担心随着阵列规模的增长性能。这是最好的方式,还是有更高效的方法?

+0

这8个必须是唯一的? – kennytm 2010-09-03 19:58:05

+0

是的,它们必须是唯一的。 – 2010-09-03 20:00:47

$result = array(); 
foreach(array_rand($my_array, 8) as $k) { 
    $result[] = $my_array[$k]; 
} 

你可以使用array_rand挑键随机和foreach收集的对象:

$objects = array(); 
foreach (array_rand($my_array, 8) as $key) { 
    $objects[] = $my_array[$key]; 
} 
+0

因为它返回数组键,而不是值? – 2010-09-03 20:00:13

+1

@Chris,这就是为什么你使用'$ my_array [$ key]'。 – eyelidlessness 2010-09-03 20:02:04

+0

@克里斯B .:我重新回答了我的答案。 :) – Gumbo 2010-09-03 20:02:07

怎么样?:

$count = count($my_array); 
for ($i = 0; $i < 8; $i++) { 
    $x = rand(0, $count); 
    $my_array[$x]; 
}
+0

这不适用于关联数组 – tamasd 2010-09-03 20:02:12

$array = array(); 
shuffle($array); // randomize order of array items 
$newArray = array_slice($array, 0, 8); 

注意shuffle()函数给出参数作为参考并对其进行更改。

+1

无循环。这是一个美丽的解决方案。 – Chords 2013-10-23 14:46:07

+1

@Chords你可以打赌'shuffle'和'array_slice'包含一些循环。 :) – 2014-02-21 02:08:16

+0

谢谢,但至少我不必看它! – Chords 2014-02-21 02:14:36

我刚刚发现这个在我们的代码,并希望能找到一个更可读的解决方案:

$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));