1

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

这是我的数据库表的样子:表menu字段id,,,parent_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>

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

谢谢 ;)

4

1 回答 1

2

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;
}
于 2013-09-22T18:25:10.377 回答