2016-03-06 93 views
0

我希望能夠在遞歸函數中打印索引,並且我不太明白爲什麼它不工作...我'能夠按照正確的順序打印一張桌子,但櫃檯工作不正常?每次打印一行時,都應該在計數器中添加一行,但這並不是真的發生了什麼......我在這裏對遞歸有點困惑。任何幫助將不勝感激。如何在遞歸樹函數(PHP)中顯示索引(#行號)

這裏是基本的代碼例如:

function outputMenu ($menu_tree, $cpt = 0) { 
    $html = ""; 
    foreach ($menu_tree as $menu) { 
     $cpt++; 
     $html .= $cpt .'- '. $menu["name"]."<br>"; 
     if (count($menu['children']) > 0) { 
      $html .= outputMenu ($menu["children"], $cpt); 
     }    
    } 
    return $html; 
} 
outputMenu($menu_tree); 

和結果:

1- ablato
2-馬龍
3- | ---頭骨3
4- | - - 泰坦尼克號
3- Uno測試
4- | ---異形Quadrilogie
5- | ------外星人回來了
6- | ------越獄
7- | --------- 24 Hours
8- | ------------ Marvels Agents of Shield
7 | ------頭骨
5 | ---閃避
6- | ---星球大戰

回答

0

因爲它是一個遞歸函數,一旦你有你會離開foreach循環您的變量中的孩子,發送當前索引。因此,對於第二個孩子,您的值爲3,4,然後您將再次繼續使用值3的foreach。

一個簡單的解決方案是在函數外部使用變量。

0

謝謝,我跟着你導致使用功能之外的全局變量,我增加

$menu_index = 0; 

function outputMenu ($menu_tree) { 
    global $menu_index; 
    $html = ""; 
    foreach ($menu_tree as $menu) { 
     $menu_index++; 
     $html .= $menu_index .'- '. $menu["name"]."<br>"; 
     if (count($menu['children']) > 0) { 
      $html .= outputMenu ($menu["children"]); 
     }    
    } 
    return $html; 
} 
outputMenu($menu_tree); 

在我的函數的開始,它現在可以正常使用。 非常感謝:)