我试图用来自数据库的行做一个菜单,我一直在这里阅读stackoverflow关于做一个递归函数来评估parentId和Id并构建较低级别的选项,但没有运气。还尝试将sql答案转换为多维数组而没有运气......
基本上我需要的是根据父元素构建一组列表元素,例如Dashboard.php是son.php的父元素
这是我的代码:
function buildMenu($userType){
try{
$db = new db();
$conn = $db->conn();
$SQL_BUILD_MENU = "select usertypes.id as menuId,
menu.name as menuName, menu.link as menuLink,
usertype_menu.parent_id as
parent from usertypes inner join usertype_menu on usertypes.id = usertype_menu.usertype_id inner join
menu on usertype_menu.menu_id =
menu.id where usertypes.name='".$userType."'";
$conn->prepare($SQL_BUILD_MENU);
foreach($check = $conn->query($SQL_BUILD_MENU) as $row) {
echo "<ul>";
echo "<a href=".$row['menuLink']."><li>" . $row['menuName'] . "</li></a>";
echo "</ul>";
}
}
catch(Exception $e){
echo "Se ha presentado un error en buildMenu".$e;
}
}
}
+----+--------+-------------+-----------------+--------+
| id | menuId | menuName | menuLink | parent |
+----+--------+-------------+-----------------+--------+
| 1 | 1 | Dashboard | dashboard.php | 0 |
| 2 | 1 | Interaction | interaction.php | 0 |
| 3 | 1 | Son | Son.php | 1 |
+----+--------+-------------+-----------------+--------+
提前致谢。
答案 0 :(得分:0)
首先,清理您的查询。使用预准备语句并绑定参数,不要添加字符串。
其次,立即获取所有相关数据并从中构建数据结构。递归不是这里的答案。
第三,无序列表不能将文本作为子项。您需要将它们封装在LI节点中。
<ul>
<li>Example 1</li>
<li>Example 2</li>
<li>
Example 3 with a child list
<ul>
<li>Example 3 Child 1</li>
</ul>
</li>
</ul>