我已将我的菜单存储如下。
id label link parent
------ ------- -------------- --------
10 Home http://cms.dev 10
11 About http://about 11
12 History http://history 11
13 Mission http://mission 11
14 Contact http://contact 14
如何从表中递归生成 ul html菜单,以获取无限项目。
Home
About
History
Mission
Contact
答案 0 :(得分:0)
什么是递归函数?当函数自己调用时。
在您的情况下,每个节点的项目看起来都是递归结构。是的,你有树和树可能绕过递归方式。
所以,递归地做。例如,如果您有包含项目的简单数组$menu
:
$menu = [
[
'id' => 10,
'label' => 'Home',
'link' => 'http://cms.dev',
'parent' => 10,
],
[
'id' => 11,
'label' => 'About',
'link' => 'http://about',
'parent' => 11,
],
[
'id' => 12,
'label' => 'History',
'link' => 'http://history',
'parent' => 11,
],
[
'id' => 13,
'label' => 'Mission',
'link' => 'http://mission',
'parent' => 11,
],
[
'id' => 14,
'label' => 'Contact',
'link' => 'http://contact',
'parent' => 14,
],
];
您可以使用菜单输出功能:
function echoMenu(&$menu, $parentId = null)
{
echo '<ul>';
foreach ($menu as &$item) {
if ((!$parentId && $item['id'] == $item['parent'])
|| ($item['parent'] == $parentId && $item['id'] != $item['parent'])) {
echo '<li>';
echo "<a href=\"${item['link']}\">${item['label']}</a>";
// Here is recursive call of echoMenu()
echoMenu($menu, $item['id']);
echo '</li>';
}
}
echo '</ul>';
}
echoMenu($menu);
我支付你的etantion对你的根节点使用'parent' => null
声明更方便。那么递归函数中的条件会更简单:
if ($item['parent'] == $parentId) {