【问题标题】:how to get an multidimensional menu out of my database?如何从我的数据库中获取多维菜单?
【发布时间】:2013-09-22 18:14:15
【问题描述】:

我想制作一个我不知道菜单有多深的菜单。

这是我的数据库表的样子: 表menu字段idparent_idname

我已经尝试过这个来获得一个不错的数组,但是它不起作用:

public function get()
{
    $nodeList = array();
    $tree     = array();
    $query = $this->db->get('menu');
    $result = $query->result_array();
    foreach ($result as $row) {
        $nodeList[$row['id']] = array_merge($row, array('children' => array()));
    }

    foreach ($nodeList as $nodeId => &$node) {
        if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
            $tree[] =& $node;
        } else {
            $nodeList[$node['parent']]['children'][] =& $node;
        }
    }

    return $nodeList;
}

最终我想实现这一点(一个漂亮的菜单):

<ul>
<li><a href="">Apple<a/>
    <ul>
        <li><a href="">Iphone</a></li>
            <ul>
                <li><a href="">4S</a></li>
                <li><a href="">5</a></li>
            </ul>
        <li><a href="">Ipad</a></li>
            <ul>
                <li><a href="">4</a></li>
                <li><a href="">5</a></li>
            </ul>
    </ul>
</li>
<li><a href="">Samsung<a/>
    <ul>
        <li><a href="">Galaxy</a></li>
            <ul>
                <li><a href="">S3</a></li>
                <li><a href="">S4</a></li>
            </ul>
    </ul>
</li>

我希望你能理解我的问题并能帮助我。我真的很高兴!需要这个。

谢谢 ;)

【问题讨论】:

    标签: php mysql multidimensional-array


    【解决方案1】:

    您的get() 应该返回$tree,而不是$nodeList。除此之外,它似乎非常好。

    更新。这个例子展示了如何为嵌套菜单构建 HTML:

    function getUl($nodes)
    {
        $result = "<ul>\n";
        foreach ($nodes as $n) {
            $result .= '<li><a href="...">...</a>';
            if (!empty($n['children'])) {
                $result .= getUl($n['children']);
            }
            $result .= "</li>\n";
        }
        $result .= "\n</ul>";
        return $result;
    }
    

    【讨论】:

    • 天哪,我太傻了,谢谢:D,但你也可以帮忙设置菜单吗?我不知道如何解决这个问题
    • @apero 尝试我发布的示例。
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多