php - 如何从我的数据库中获取多维菜单?

标签 php mysql multidimensional-array

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

这是我的数据库表的样子: 表 menu 字段 id, parent_id, name

我已经试过这个来得到一个漂亮的数组,但它不起作用:

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>

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

谢谢;)

最佳答案

您的 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;
}

关于php - 如何从我的数据库中获取多维菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947195/

相关文章:

php - 无法实例化邮件功能。为什么会出现这个错误

PHP/GD - 透明背景

php - 如何通过表单将数据插入数据库并将某些表单字段留空?

php - textarea 的字段类型是什么?

php - 如何定义一个 php 类的全局实例?

php - 如何将我的网站、mySQL、php 页面、文件、设置等迁移到 Amazon EC2?

php - 以下哪种方法可以提供最快的页面加载速度?

javascript - 在 JavaScript 中将数据构建到多维数组中

java - 多维线段树

C# 坐标键字典