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

时间:2010-09-03 19:55:08

标签: php arrays random

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

我知道我可以使用shuffle,但随着阵列数量的增加,我担心性能问题。这是最好的方式,还是有更有效的方式?

6 个答案:

答案 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;
    }