PHP中的分层菜单来自Array

时间:2013-07-17 13:35:08

标签: php arrays associative-array hierarchical-data

好吧,这是驼峰的一天,我的大脑已经开枪了。

有人可以告诉我这里我做错了什么,我正在尝试正确建立一个导航列表(hierarchal)

这是数组:

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>

那么......我做错了什么,我该如何解决呢?

1 个答案:

答案 0 :(得分:3)

制作这一行......

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;
}