2012-12-27 62 views
0

我有一個嵌套的assocative陣列可能是這個樣子:如何在PHP中隨機循環訪問第一層嵌套關聯數組?

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

如何可以通過隨機的順序,第一層(虎,鷹,鯊魚),並確保環路,我涵蓋所有在我循環?我在查看PHP函數shuffle();但我認爲該函數通過混洗所有圖層來混淆整個數組。

回答

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); 
+0

尼斯之一!非常感謝你。 – alieninlondon

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

'shuffle'不保存數組的密鑰。請參閱文檔中的註釋:http://php.net/manual/en/function.shuffle.php – Carsten

+0

好的。通俗地說,這意味着什麼? – alieninlondon

+0

我在回答之前沒有看到,您正在使用關聯數組。這意味着你有命名鍵,IE'$ array ['name'] ='Bob'; $ array ['phone'] ='555-4202',而不是'$ array [0] ='Bob'; $ array [1] ='555-4202'。當你使用shuffle時,它會混合鍵,所以現在'$ array ['name']'可能等於''555-4202''。這對編號數組無關緊要,但對於命名數組,它會毀掉您的數據。 – MrGlass

1

你可以使用array_keys()得到密鑰。然後您可以使用shuffle()對產生的密鑰數組進行洗牌並遍歷它。

例子:

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