2013-05-31 188 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 –