如何从PHP中的数组中选择随机值?
我有一个PHP中的对象数组。我需要随机选择其中的8个。我最初的想法是使用array_rand(array_flip($my_array), 8)
但这不起作用,因为对象不能作为数组的键。如何从PHP中的数组中选择随机值?
我知道我可以使用shuffle
,但是我担心随着阵列规模的增长性能。这是最好的方式,还是有更高效的方法?
$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];
}
因为它返回数组键,而不是值? – 2010-09-03 20:00:13
@Chris,这就是为什么你使用'$ my_array [$ key]'。 – eyelidlessness 2010-09-03 20:02:04
@克里斯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];
}
这不适用于关联数组 – tamasd 2010-09-03 20:02:12
$array = array();
shuffle($array); // randomize order of array items
$newArray = array_slice($array, 0, 8);
注意shuffle()
函数给出参数作为参考并对其进行更改。
我刚刚发现这个在我们的代码,并希望能找到一个更可读的解决方案:
$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));
这8个必须是唯一的? – kennytm 2010-09-03 19:58:05
是的,它们必须是唯一的。 – 2010-09-03 20:00:47