我想制作一个我不知道菜单深度的菜单。
这是我的数据库表的样子:
表 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/