1

よし、こぶの日だ、もう脳みそが撃ち抜かれた。

誰かが私がここで間違っていることを教えてもらえますか?ナビゲーションリストを適切に構築しようとしています(階層型)

配列は次のとおりです。

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>

だから..私は何を間違っていますか?どうすれば修正できますか?

4

1 に答える 1

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;
}
于 2013-07-17T13:43:28.397 に答える