dinamic嵌套菜单php

时间:2017-04-13 10:30:23

标签: php sql menu

我有一个像这样的表菜单

我有像第二张图片那样用ul和li标签这样显示的问题。 请帮我解决问题

menu_code | desc_code
1 |菜单1 1.1 |菜单1.1
1.2 |菜单1.2
1.2.1 |菜单1.2.1
2 |菜单2
 我想用“无限级别菜单”概念显示我的表格菜单。

1 个答案:

答案 0 :(得分:0)

我会考虑改变你的表结构。您将需要遍历每个父级和子级,您不希望通过字符串拆分来执行此操作。我建议你创建一个额外的列parent_id并绑定你的项目。之后,通过其子项递归地轻松爬行以创建ul>李结构。

递归函数示例:

public static function buildTree($items, $parent_id = null) {
    $result = [];

    foreach($items as $item) {
        if($item->parent_id == $parent_id) {
            $children = self::buildTree($items, $item->id);

            if($children) {
                $item->children = $children;
            }

            $result[$item->id] = $item;
        }
    }

    return $result;
}

之后,您可以使用构建函数的结果递归创建菜单结构:

public static function treeToHtml($tree, $level = 0) {
    $result = '';

    $result .= '<ul>';
    foreach($tree as $item) {
        $has_children = isset($item->children) && count($item->children) > 0;

        if($has_children) {
            $result .= '<li><a href="#">';
            $result .= self::treeToHtml($item->children, $level + 1);
            $result .= '</li>';
        } else {
            $result .= '<li><a href="#"></li>';
        }
    }

    $result .= '</ul>';

    return $result;
}

相应地编辑功能并且静态地取决于您在其中使用它的上下文。