数组中的PHP层次结构菜单


Hierarchal Menu in PHP from Array

好吧,今天是驼峰日,我的大脑已经瘫痪了。

有人能告诉我我在这里做错了什么吗?我正试图正确地建立一个导航列表(层次)

这是阵列:

Array
(
[0] => Array
    (
        [contentID] => 1
        [parentID] => 0
        [LinkAlias] => 
    )
[1] => Array
    (
        [contentID] => 2
        [parentID] => 0
        [LinkAlias] => inner
    )
[2] => Array
    (
        [contentID] => 3
        [parentID] => 2
        [LinkAlias] => inner-2
    )
[3] => Array
    (
        [contentID] => 4
        [parentID] => 3
        [LinkAlias] => inner-21
    )
)

我对递归函数的尝试:

    // Parse out the array for displaying a multi-level menu
    private function ParseMenu($menu, $parent = 0){
        $ret .= '<ul>';
        $iCt = count($menu);

        for($i=0; $i < $iCt; ++$i){
            if($menu[$i]['parentID'] == $parent){               
                $ret .= '   <li>' . $menu[$i]['LinkAlias'];
                if($parent > 0){
                    $ret .= ParseMenu($menu, $menu[$i]['contentID']);
                }
                $ret .= '</li>';                
            }
        }
        $ret .= '</ul>';
        return $ret;
    }

现在,它正在返回:

<ul>
    <li></li>
    <li>inner</li>
</ul>

它应该显示

<ul>
    <li></li><!-- yes this is intentional -->
    <li>inner
            <ul>
                    <li>inner-2
                            <ul>
                                    <li>inner-21</li>
                            </ul>
                    </li>
            </ul>
</ul>

所以。。我做错了什么?我该怎么解决?

制作此行。。。

if($parent > 0){
    $ret .= ParseMenu($menu, $menu[$i]['contentID']);
}

进入。。。

$ret .= $this->ParseMenu($menu, $menu[$i]['contentID']);

你再也不会调用你的函数了,因为你总是以$parent=0 开头

$ret .= '</ul>';
if($ret == '<ul></ul>'){ 
    return;
} else {
    return $ret;
}