好吧,这是驼峰的一天,我的大脑已经开枪了。
有人可以告诉我这里我做错了什么,我正在尝试正确建立一个导航列表(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>
那么......我做错了什么,我该如何解决呢?
答案 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;
}