0

私は次のように見えるかもしれないネストされた連想配列を持っています:

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

最初のレイヤー(トラ、イーグル、サメ)をランダムな順序でループし、それらすべてをループで確実にカバーするにはどうすればよいですか?PHP関数shuffle();を見ていましたが、この関数はすべてのレイヤーをシャッフルすることで配列全体を台無しにしていると思います。

4

3 に答える 3

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);
于 2012-12-27T18:03:40.303 に答える
1

を使用してキーを取得できますarray_keys()。次に、を使用して結果のキー配列をシャッフルし、shuffle()それを反復処理できます。

例:

$keys = array_keys($myarray);
shuffle($keys);
foreach ($keys as $key) {
  var_dump($myarray[$key]);
}
于 2012-12-27T18:06:32.693 に答える
0

私のテストによると、シャッフルは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);
?>
于 2012-12-27T18:05:17.617 に答える