PHP数组到菜单树

时间:2016-06-17 07:44:49

标签: php arrays recursion tree

我正在尝试通过递归函数将php数组格式化为可视树,但由于某种原因它似乎不起作用。它只打印第一级。这是我的代码。

function recursiveMenu($arr){
    $maketree = "";
    if(is_array($arr)){
        foreach($arr as $key => $val){
            if(is_array($val)){
                $maketree .= "<div class='expcol jexpand'><a>[-]</a>".$key."</div>"
                           . "<div class='section jsection'>";
                recursiveMenu($val);
            }else{
                $maketree .= "<div>".TB.TB." <a href='index.php?action=". $val . "' >"
                          . "<div class='menuitem'>" . $val . "</div>"
                          . "</a></div>";
            }
            $maketree .="</div>";
        }
    }
    return $maketree;
}

function makeMenu($srch) {
    $makemenu = "<div>";
    $makemenu .= recursiveMenu($srch);
    $makemenu .= "</div>";  // </a>
    return $makemenu;
}

以下是我的数据库结果:

$srch = Array(
    [Asia] => Array(
            [South] => Array(
                    [India] => Array(
                            [0] => Mumbai
                            [1] => New Delhi
                            [2] => Chennai
                        )
                )
        )

    [Europe] => Array(
            [West] => Array(
                    [Spain] => Array(
                            [0] => Madrid
                        )
                )

            [North] => Array(
                    [Denmark] => Array(
                            [0] => Copenhagen
                        )
                )
        )

    [Americas] => Array(
            [South] => Array(
                    [Brazil] => Array(
                            [0] => Brasilia
                        )
                )

            [North] => Array(
                    [USA] => Array(
                            [0] => Los Angeles
                            [1] => Atlanta
                            [2] => Boston
                            [3] => Houston
                        )
                )

            [Central] => Array(
                    [Mexico] => Array(
                            [0] => Cancun
                            [1] => Mexico city
                        )
                )

        )

    [Africa] => Array(
            [South] => Array(
                    [South Africa] => Array(
                            [0] => Cape Town
                            [1] => Johannesburg
                        )
                )
        )
)

我得到的实际结果是(仅限第一级):

[-]Asia
[-]Europe
[-]Americas
[-]Africa

有人看到这里有什么问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

你忘了将第二次递归调用的结果附加到recursiveMenu()到输出。我认为您需要将第8行更改为:

$maketree .= recursiveMenu($val);
相关问题