【发布时间】:2011-04-08 00:55:29
【问题描述】:
我在 PHP 中有一个对象数组。我需要随机选择其中的 8 个。我最初的想法是使用 array_rand(array_flip($my_array), 8) 但这不起作用,因为对象不能充当数组的键。
我知道我可以使用shuffle,但是随着数组大小的增加,我担心性能问题。这是最好的方法,还是有更有效的方法?
【问题讨论】:
我在 PHP 中有一个对象数组。我需要随机选择其中的 8 个。我最初的想法是使用 array_rand(array_flip($my_array), 8) 但这不起作用,因为对象不能充当数组的键。
我知道我可以使用shuffle,但是随着数组大小的增加,我担心性能问题。这是最好的方法,还是有更有效的方法?
【问题讨论】:
$result = array();
foreach( array_rand($my_array, 8) as $k ) {
$result[] = $my_array[$k];
}
【讨论】:
$array = array();
shuffle($array); // randomize order of array items
$newArray = array_slice($array, 0, 8);
注意shuffle() 函数将参数作为参考并对其进行更改。
【讨论】:
shuffle 和array_slice 包含一些循环。 :)
您可以使用array_rand 随机选择密钥,使用foreach 收集对象:
$objects = array();
foreach (array_rand($my_array, 8) as $key) {
$objects[] = $my_array[$key];
}
【讨论】:
$my_array[$key]的原因。
怎么样?
$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
$x = rand(0, $count);
$my_array[$x];
}
【讨论】:
我刚刚在我们的代码中发现了这个,并希望找到一个更具可读性的解决方案:
$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));
【讨论】:
您可以使用此函数从数组中获取多个随机元素:
function getRandomElements(array $array): array
{
$result = [];
$count = count($array);
for ($i = 0; $i < rand(0, $count); $i++) {
$result[] = rand(0, $count);
}
$result = array_unique($result);
sort($result);
return $result;
}
【讨论】: