输出多级下拉菜单

时间:2018-05-03 11:49:54

标签: php html twitter-bootstrap

我有一个包含数据的数组:

$arr=[1=>['id'=>1,'value'=>"Main",'id_parent'=>0],
      2=>['id'=>2,'value'=>"Port",'id_parent'=>0,'children'=>[
         3=>['id'=>3,'value'=>"Auto",'id_parent'=>2],
         4=>['id'=>4,'value'=>"Busy",'id_parent'=>2],
         5=>['id'=>5,'value'=>"Sury",'id_parent'=>2,'children'=>[
            6=>['id'=>6,'value'=>"Truk",'id_parent'=>5]]]]]];

我不能像树状菜单那样把它拿出来...我的代码:

<li class="dropdown">
    <a href="#" class="dropdown-toggle menu-items" data-toggle="dropdown" role="button" aria-expanded="false">Menu<span class="caret"></span></a>
<?php 
function createTemplateMenu($value){
    $menu = "<ul class='dropdown-menu'>";
    if (isset($value['children'])) $menu .= "<li class='dropdown-submenu'>" . showCat($value['children']) . "</li>";
    $menu .= "<li><a href=''>{$value['value']}</a></li></ul>";
    return $menu;
}
function showCat($data){
    $string = "";
    foreach ($data as $item) {
        $string .= createTemplateMenu($item);
    }
    return $string;
}
echo showCat($arr);?>
</li>

在html上它看起来像这样:https://jsfiddle.net/ob8yo5nL/它没有按需显示,我只是一个代码示例的例子。

1 个答案:

答案 0 :(得分:1)

你需要的是一个递归 - 一个自我调用的递归函数,如下所示:

function showCat($data){
    $string = "";
    foreach ($data as $item) {
        $string .= createTemplateMenu($item);

        if(array_key_exists("children", $item) && is_array($item['children'])) {
            $string .= showCat($item['children']);
        }

    return $string;
}

这只是一个例子。你需要做更多的工作并重新考虑你的渲染函数(createTemplateMenu),但在这种情况下递归是解决方案。

请参阅:https://www.sitepoint.com/understanding-recursion/