我在PHP中有一组对象。我需要随机选择其中的8个。我最初的想法是使用array_rand(array_flip($my_array), 8)
,但这不起作用,因为对象不能作为数组的键。
我知道我可以使用shuffle
,但随着阵列数量的增加,我担心性能问题。这是最好的方式,还是有更有效的方式?
答案 0 :(得分:8)
$result = array();
foreach( array_rand($my_array, 8) as $k ) {
$result[] = $my_array[$k];
}
答案 1 :(得分:6)
$array = array();
shuffle($array); // randomize order of array items
$newArray = array_slice($array, 0, 8);
请注意shuffle()
函数将参数作为参考并对其进行更改。
答案 2 :(得分:2)
您可以使用array_rand
随机选择密钥,使用foreach
来收集对象:
$objects = array();
foreach (array_rand($my_array, 8) as $key) {
$objects[] = $my_array[$key];
}
答案 3 :(得分:0)
怎么样?:
$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
$x = rand(0, $count);
$my_array[$x];
}
答案 4 :(得分:0)
我刚刚在我们的代码中找到了这个,并希望找到一个更易读的解决方案:
$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));
答案 5 :(得分:0)
您可以使用此函数从数组中获取多个随机元素:
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;
}