【问题标题】:Randomize order of array rows as well as the elements in each row随机化数组行的顺序以及每行中的元素
【发布时间】:2013-05-24 13:48:07
【问题描述】:

我确实有办法在数组中获取随机元素:

$array1 = array("Bird", "Animal", "Tower", "Car", "Tree");
$rand_keys = array_rand($input, 4);

echo $array1[$rand_keys[0]] . "\n";
echo $array1[$rand_keys[1]] . "\n";
echo $array1[$rand_keys[2]] . "\n";
echo $array1[$rand_keys[3]] . "\n";

但是,如果我有 3 个数组,我也可以随机化它们的元素:

$array1 = array("Bird", "Animal", "Tower", "Car", "Tree");
$array2 = array("Falcon", "Cat", "Man", "Poll", "Sea");
$array3 = array("Lion", "Apple", "Rock", "Ball", "Tea");

如何获得数组本身的垂直随机化?

我需要结果像这些模式:

Car Tree Bird Animal Tower  // array1
Man Poll Falcon Cat Sea     // array2
Rock Ball Tea Lion Apple    // array3

如果我刷新页面,另一个:

Lion Apple Rock Ball Tea    // array3
Animal Tower Car Tree Bird  // array1
Man Cat Sea Poll Falcon     // array2

【问题讨论】:

    标签: php arrays random shuffle


    【解决方案1】:
    $array = array(
      array('Bird', 'Animal', 'Tower', 'Car', 'Tree'),
      array('Falcon', 'Cat', 'Man', 'Poll', 'Sea'),
      array('Lion', 'Apple', 'Rock', 'Ball', 'Tea')
    );
    
    array_walk($array, function (&$array) { shuffle($array); });
    shuffle($array);
    
    var_dump($array);
    

    【讨论】:

    • 我有一个额外的问题:每个数组中有 5 个元素,如何从结果中删除位置 0 的元素?我的意思是我只想从 1 到 4 获取位置的元素?进一步澄清,我不需要“鸟”、“猎鹰”和“狮子”每次都参与洗牌。
    • 嗯,这也很简单——只需在改组下数组之前丢弃第一个元素,使用 array_shift:array_walk($array, function (&$array) { array_shift($array); shuffle($array); });
    【解决方案2】:
     $array1= array("Bird", "Animal", "Tower", "Car", "Tree");
     $array2= array("Falcon", "Cat", "Man", "Poll", "Sea");
     $array3= array("Lion", "Apple", "Rock", "Ball", "Tea");
     $arr = array_merge($array1,$array2,$array3);
     shuffle($arr);
     print_r($arr);
    

    将这些数组与array_merge() 合并并使用shuffle()

    【讨论】:

    • 我不想合并数组,我需要将每个数组分开。
    【解决方案3】:

    您可以使用array_merge

    $arrays = array_merge($array1, $array2, $array3);
    $rand_keys = array_rand($arrays, 4);
    

    编辑:

    看来你想shuffle:

    $arrays[0] = array("Bird", "Animal", "Tower", "Car", "Tree");
    $arrays[1] = array("Falcon", "Cat", "Man", "Poll", "Sea");
    $arrays[2] = array("Lion", "Apple", "Rock", "Ball", "Tea");
    
    foreach (array_keys($arrays) as $key) {
        shuffle($arrays[$key]);
    };
    shuffle($arrays);
    
    foreach ($arrays as $array) {
        print_r($array);
    }
    

    【讨论】:

    • 我不想合并数组,我需要将每个数组分开。请检查更新。
    【解决方案4】:

    Shuffle 每一行,然后打乱主数组。

    foreach($mainArray as &row)
      shuffle($row);
    
    shuffle($mainArray);
    

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2010-10-23
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多