2013-02-08 143 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. 

完成!