Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中从数组中选择随机值?_Php_Arrays_Random - Fatal编程技术网

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

如何在PHP中从数组中选择随机值?,php,arrays,random,Php,Arrays,Random,我有一个PHP中的对象数组。我需要随机选择其中的8个。我最初的想法是使用array\u rand(array\u flip($My\u array),8),但这不起作用,因为对象不能充当数组的键 我知道我可以使用shuffle,但随着阵列规模的增加,我担心性能。这是最好的方法,还是有更有效的方法?您可以使用array\u rand随机拾取关键点,使用foreach收集对象: $objects = array(); foreach (array_rand($my_array, 8) as $key

我有一个PHP中的对象数组。我需要随机选择其中的8个。我最初的想法是使用
array\u rand(array\u flip($My\u array),8)
,但这不起作用,因为对象不能充当数组的键


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

您可以使用
array\u rand
随机拾取关键点,使用
foreach
收集对象:

$objects = array();
foreach (array_rand($my_array, 8) as $key) {
    $objects[] = $my_array[$key];
}
那怎么办

$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
  $x = rand(0, $count);
  $my_array[$x];
}
$count=count($my_数组);
对于($i=0;$i<8;$i++){
$x=兰特(0,$count);
$my_数组[$x];
}

请注意,
shuffle()
函数将参数作为引用并对其进行更改。

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

$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;
    }
函数getRandomElements(数组$array):数组 { $result=[]; $count=计数($array); 对于($i=0;$i因为它返回的是数组键,而不是值?@Chris,这就是为什么您使用
$my_数组[$key]
@Chris B.:我重新表述了我的答案。:)过早扣动扳机,然后在事后纠正你的答案是没有意义的。第一次做对的人是有功劳的。无循环。这是一个很好的解决方案。@和弦可以打赌
shuffle
array\u slice
包含一些循环。:)触摸,但至少我不必看它!史诗!非常感谢。
$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;
    }