2013-02-08 114 views
-5

我正在寻找并尝试几天......对不起! 我有一个像下面的数组。它是有序的,但我可能不知道它有多深。我需要穿过它,每个孩子的节点。我不想使用递归,因为我需要将它集成到另一个代码块中,而且我自己也很难。我正在寻找像foreach一样简单的东西,但是这只会给我3个父节点...我需要将每个节点放在一个“块”中,因为我需要访问它们,如$arr['id_categoria']$arr['nome_categoria']无递归迭代阵列

有什么建议吗? 非常感谢!

Array 
(
    [3] => Array 
     (
      [id_categoria] => 3 
      [nome_categoria] => Bebidas 
      [id_categoria_pai] => 0 
      [submenu] => Array 
       (
        [5] => Array 
         (
          [id_categoria] => 5 
          [nome_categoria] => Alcoolicas 
          [id_categoria_pai] => 3 
          [submenu] => Array 
           (
            [10] => Array 
             (
              [id_categoria] => 10 
              [nome_categoria] => Espirituosas 
              [id_categoria_pai] => 5 
              [submenu] => Array 
               (
               ) 

             ) 

           ) 

         ) 

        [11] => Array 
         (
          [id_categoria] => 11 
          [nome_categoria] => sem alcool 
          [id_categoria_pai] => 3 
          [submenu] => Array 
           (
           ) 

         ) 

       ) 

     ) 

    [4] => Array 
     (
      [id_categoria] => 4 
      [nome_categoria] => Sandes 
      [id_categoria_pai] => 0 
      [submenu] => Array 
       (
       ) 

     ) 

    [7] => Array 
     (
      [id_categoria] => 7 
      [nome_categoria] => Outros pedidos 
      [id_categoria_pai] => 0 
      [submenu] => Array 
       (
       ) 

     ) 

) 
+2

向我们显示您的代码。 – Kermit 2013-02-08 16:19:29

+2

如果你不知道你需要递归的深度! – Alepac 2013-02-08 16:20:46

+1

@JackManey你如何确定没有递归的最大深度? – leftclickben 2013-02-08 16:20:53

回答

1

为此,您必须使用递归,因为您不知道它有多深。

但是,您可以制作一个递归函数来提取数组中的所有单个值。

+3

事实上,它可以做到没有递归,就像其他所有事情一样。您只需采用递归算法并将其转换为迭代版本即可。但这有点不自然。 – Jon 2013-02-08 16:22:21

1

递归?你不需要(显式)递归!只需使用一个RecursiveArrayIterator,包装在一个RecursiveIteratorIterator和迭代,就像这样:

$array = array(); // From the OP 

$iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST); 

foreach($iter as $el) { 
    echo $el['id_categoria']; 
} 

为了您的数组,这会打印:

3 
5 
10 
11 
etc. 

完成!