我正在尝试用php从mysql表格中创建一个动态菜单,但我不知道如何创建非分类菜单,这是我到目前为止所做的,并且只处理有子菜单的分类,但它们没有在echo上显示的非分类菜单。
MySQL类别菜单表:
catid name group
1 category name 1 0 -> whithout submenu
2 category name 2 1 -> category
3 category name 3 1 -> category
4 category name 4 0 -> whithout submenu
5 category name 5 0 -> whithout submenu
MySQL子菜单表:
id name parentid -> catid (category menu table)
1 name 1 2
2 name 2 3
3 name 3 3
4 name 4 3
5 name 5 2
我的Php代码:
<?php
function loop($array = array(), $parentID = 0) {
if (!empty($array[$parentID])) {
echo '<ul>';
foreach ($array[$parentID] as $items) {
echo '<li>';
echo $items['name'];
loop($array, $items['catid']);
echo '</li>';
}
echo '</ul>';
}
}
function menu() {
$query = $db->query("SELECT m.name, m.parentid, c.group FROM `submenus` m LEFT JOIN( SELECT catid, group, parentid, ico, STATUS , MIN(name) AS category FROM `menu_categories` GROUP BY catid ) c ON m.parentid = c.catid");
$array = array();
if ($db->numRows($query)) {
while ($rows = $db->fetch($query)) {
$array[$rows['parentid']][] = $rows;
}
loop($array);
}
}
echo menu();
?>
发布于 2021-07-01 05:14:04
尝试使用Full Join
,而不是在category表中忽略不成对记录的Left Join
<?php
function loop($array = array(), $parentID = 0) {
if (!empty($array[$parentID])) {
echo '<ul>';
foreach ($array[$parentID] as $items) {
echo '<li>';
echo $items['name'];
loop($array, $items['catid']);
echo '</li>';
}
echo '</ul>';
}
}
function menu() {
$query = $db->query("SELECT m.name, m.parentid, c.group FROM `submenus` m FULL JOIN( SELECT catid, group, parentid, ico, STATUS , MIN(name) AS category FROM `menu_categories` GROUP BY catid ) c ON m.parentid = c.catid");
$array = array();
if ($db->numRows($query)) {
while ($rows = $db->fetch($query)) {
$array[$rows['parentid']][] = $rows;
}
loop($array);
}
}
echo menu();
?>
https://stackoverflow.com/questions/68201422
复制相似问题