【问题标题】:How to randomly loop through first layer of nested associative array in PHP?如何在 PHP 中随机循环第一层嵌套关联数组?
【发布时间】:2012-12-13 02:24:06
【问题描述】:

我有一个嵌套的关联数组,它可能看起来像这样:

$myarray = array(
  ['tiger'] => array(
    ['people'], ['apes'], ['birds']
  ),
  ['eagle'] => array(
    ['rodents'] => array(['mice'], ['squirrel'])
  ),
  ['shark'] => ['seals']
);

如何以随机顺序循环遍历第一层(老虎、鹰、鲨鱼)并确保在循环中将它们全部覆盖?我正在查看 PHP 函数 shuffle();,但我认为该函数通过改组所有层来弄乱整个数组。

【问题讨论】:

    标签: php loops random associative-array


    【解决方案1】:

    你可以像这样对数组进行随机排序,它会保留键和值

    <?php
    $myarray = array(
      'tiger' => array(
        'people', 'apes', 'birds'
      ),
      'eagle' => array(
        'rodents' => array('mice', 'squirrel')
      ),
      'shark' => 'seals'
    );
    
    $shuffleKeys = array_keys($myarray);
    shuffle($shuffleKeys);
    $newArray = array();
    foreach($shuffleKeys as $key) {
        $newArray[$key] = $myarray[$key];
    }
    
    print_r($newArray);
    

    【讨论】:

    • 不错的一个!非常感谢。
    【解决方案2】:

    根据我的测试,shuffle 只会随机化 1 层。自己试试吧:

    <?php
    $test = array(
            array(1,2,3,4,5),
            array('a','b','c','d','e'),
            array('one','two','three','four','five')
        );
    shuffle($test);
    var_dump($test);
    ?>
    

    【讨论】:

    • shuffle 不保留数组的键。请参阅文档中的注释:php.net/manual/en/function.shuffle.php
    • 在我回答之前我没有看到,您使用的是关联数组。这意味着您已命名键,即$array['name'] = 'Bob'; $array['phone'] = '555-4202',而不是$array[0] = 'Bob'; $array[1] = '555-4202'. When you use shuffle, it mixes up the keys, so now $array['name']` 可能等于'555-4202'。这对于编号数组无关紧要,但对于命名数组,它会破坏您的数据。
    【解决方案3】:

    您可以使用array_keys() 获取密钥。然后,您可以使用 shuffle() 打乱生成的键数组并对其进行迭代。

    例子:

    $keys = array_keys($myarray);
    shuffle($keys);
    foreach ($keys as $key) {
      var_dump($myarray[$key]);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多