2013-05-31 98 views
11

我有一個這樣的陣列:PHP遞歸迭代器:當前數組迭代的父鍵?

$arr = array(
     $foo = array(
      'donuts' => array(
        'name' => 'lionel ritchie', 
        'animal' => 'manatee', 
       ) 
     ) 
    ); 

使用「SPL遞歸迭代」的那魔和此代碼:

$bar = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

    foreach($bar as $key => $value) 
    { 
     echo $key . ": " . $value . "<br>"; 
    } 

我可以遍歷多維數組和返回鍵=>值對,如:

名:萊昂納爾·裏奇 動物:海牛

不過,我需要返回當前迭代陣列的父元素一樣,所以......

甜甜圈名稱:Lionel Richie的 甜甜圈動物:海牛

這是可能的?

(我只意識到所有的「遞歸迭代器」的東西,所以如果我失去了一些東西很明顯,我很抱歉。)

+0

可能重複[遞歸獲取陣列的主要創造下劃線分隔字符串(http://stackoverflow.com/questions/2749398/get-arrays-key-recursively-and-create-underscore -seperated-string) – salathe

回答

14

您可以訪問通過getSubIterator迭代器,並在你的情況要重點:

<?php 

$arr = array(
    $foo = array(
     'donuts' => array(
       'name' => 'lionel ritchie', 
       'animal' => 'manatee', 
      ) 
    ) 
); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

foreach ($iterator as $key => $value) { 
    // loop through the subIterators... 
    $keys = array(); 
    // in this case i skip the grand parent (numeric array) 
    for ($i = $iterator->getDepth()-1; $i>0; $i--) { 
     $keys[] = $iterator->getSubIterator($i)->key(); 
    } 
    $keys[] = $key; 
    echo implode(' ',$keys).': '.$value.'<br>'; 

} 

?> 
+0

完美!非常感謝您的快速響應。 –

+0

謝謝。作爲'get_leafs()'的要點 https://gist.github.com/szepeviktor/da5dc89110eda7a8d855b3676f1bfd7f –