如何在PHP中随机循环遍历第一层嵌套关联数组?

时间:2012-12-27 17:57:47

标签: php loops random associative-array

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

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

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

3 个答案:

答案 0 :(得分:2)

您可以随意对数组进行排序,它会保留键和值

<?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);

答案 1 :(得分:1)

您可以使用array_keys()获取密钥。然后,您可以使用shuffle()对生成的键数组进行随机播放并迭代它。

示例:

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

答案 2 :(得分:0)

根据我的测试,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);
?>