Hierarchal Menu in PHP from Array

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

Alright, it s hump day, and my brain s already shot.

Can someone tell me what I m doing wrong here, I m trying to build a Navigation list properly (hierarchal)

Here s the 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
    )

)

And my attempts at the recursive function:

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

Right now, all it is returning:

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

It should be showing

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

So.. what am I doing wrong, and how can I fix it?

Answers

Make this line ...

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

into ...

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

You are never calling your function again because you are always starting with $parent = 0

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

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/17701233/hierarchal-menu-in-php-from-array

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils