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

时间:2016-04-07 00:23:28

标签: php arrays

我有这个代码从我的数组中获取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个值,就可以正常工作。现在我想修改我的代码,这样当我想要比我的数组中更多的随机值时,它只会再次从数组中获取新的代码。是的,这意味着我可以多次获得一些值。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以使用简单的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);

?>

答案 1 :(得分:0)

您可以使用$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
}

及其元素由array_filter($find_league_maps)返回的具有相同键的元素替换。

答案 2 :(得分:0)

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

FileProvider

$league_match_maps = ",".$maps_clean[0].",".$maps_clean[1].",".$maps_clean[2].","; 的输出是什么?