如何从数组中获得比数组更多的随机元素


How to get more random elements from an array, than the array has?

我有这样的代码从我的数组中获得3个随机值:

$maps_clean = array_filter($find_league_maps);
$random_maps = array_rand($maps_clean,3);
$league_match_maps = ",".$maps_clean[1].",".$maps_clean[2].",".$maps_clean[3].",";

只要数组至少有3个值,这种方法就会起作用。现在我想修改我的代码,这样当我想要比数组中更多的随机值时,它就会再次从数组中获得新的值。是的,这意味着我可以不止一次地拥有一些价值观。

我该怎么做?

您可以使用一个简单的while循环,并将shuffle()作为其中的数组,然后使用array_slice()获得所需的任意数量的随机元素。现在,如果您想要比数组元素更多的随机值,只需获取整个数组,进入下一次迭代,并从新的搅乱数组中获取所需的其余值。

代码

<?php
    $arr = [1,2,3,4];

    $random = 5;
    $result = [];
    while(count($result) != $random){
        shuffle($arr);
        $result = array_merge($result, array_slice($arr, 0, $random - count($result))); 
    }
    print_r($result);
?>

您可以使用$maps_clean将数组中具有相同键的元素替换为值。

$maps_clean = array_replace(array_fill(1, 3, null), array_filter($find_league_maps));

此处array_fill返回:

array(3) {
  [1]=>
  NULL
  [2]=>
  NULL
  [3]=>
  NULL
}

并且其元素被CCD_ 5返回的具有相同密钥的元素所替换。

默认情况下,数组键从0开始,因此,请尝试使用

 $league_match_maps = ",".$maps_clean[0].",".$maps_clean[1].",".$maps_clean[2].",";

count($maps_clean)的输出是什么?