如何在递归树函数(PHP)中显示索引(#行号)

如何在递归树函数(PHP)中显示索引(#行号),php,recursion,indexing,menu,Php,Recursion,Indexing,Menu,我希望能够在递归函数中打印索引,但我真的不明白为什么它不起作用。。。我可以按正确的顺序打印表格,但计数器工作不正常???每次它打印一行,它应该在计数器中添加一行,但这并不是这里真正发生的事情。。。我对这里的递归有点困惑。任何帮助都将不胜感激 下面是基本代码示例: function outputMenu ($menu_tree, $cpt = 0) { $html = ""; foreach ($menu_tree as $menu) { $cpt++;

我希望能够在递归函数中打印索引,但我真的不明白为什么它不起作用。。。我可以按正确的顺序打印表格,但计数器工作不正常???每次它打印一行,它应该在计数器中添加一行,但这并不是这里真正发生的事情。。。我对这里的递归有点困惑。任何帮助都将不胜感激

下面是基本代码示例:

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);
函数输出菜单($menu\u tree,$cpt=0){
$html=“”;
foreach($menu\u树作为$menu){
$cpt++;
$html.=$cpt.'-'.$menu[“name”]。“
”; 如果(计数($menu['children'])>0){ $html.=outputMenu($menu[“children”],$cpt); } } 返回$html; } outputMenu($menu\u tree);
结果是:

1-ablato
2-马龙
3-|----头骨3
4-|----泰坦尼克号
3-Uno测试
4-|----外星人四分法
5-|------外星人回来了
6-|------越狱
7-|------24小时
8-|------惊奇盾特工
7-|------头骨
5-|-逃避

6-|--《星球大战》

因为它是一个递归函数,一旦变量中有子变量,就可以离开foreach循环,发送当前索引。因此,对于数字2的第一个子项,您有值3、4,然后您将再次使用值3继续foreach


一个简单的解决方案是在函数外部使用一个变量。

谢谢,我跟随您的思路在函数外部使用一个全局变量,并添加了

$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);
$menu\u index=0;
函数输出菜单($menu\U树){
全球美元指数;
$html=“”;
foreach($menu\u树作为$menu){
$menu_index++;
$html.=$menu_index.'-'.$menu[“name”]。“
”; 如果(计数($menu['children'])>0){ $html.=outputMenu($menu[“children”]); } } 返回$html; } outputMenu($menu\u tree);
在我的功能开始时,它现在工作得很好。 非常感谢:)