1 回答

TA貢獻1828條經驗 獲得超3個贊
直接回答:
首先,您需要在外部和內部 foreach 中使用 2 個不同的變量:foreach ($HeaderMenu as $menuRow){現在foreach ($SubHeaderMenu as $subMenuRow){兩者都有$row. 你可以這樣做:if ($menuRow['id'] == 3) { foreach ($SubHeaderMenu as $subMenuRow){- 所以將內部 foreach 包含在其中,if并且僅當父 id 為 3 時才執行此操作,但最好獲取所有 header_menu 行,將該數據轉換為嵌套數組并按動態結構顯示。
動態結構答案:
獲取所有菜單項,創建菜單數組,每個菜單都會有其子菜單項。然后顯示這個就很容易了。我假設只有兩個級別 - 菜單和子菜單。
樣本數據:
+----+-------+---------------+-----------+
| id | href | content | parent_id |
+----+-------+---------------+-----------+
| 1 | href1 | header1 | NULL |
| 2 | href2 | header2 | NULL |
| 3 | href3 | header3 | NULL |
| 4 | href4 | subheader 1 1 | 1 |
| 5 | href5 | subheader 1 2 | 1 |
| 6 | href6 | subheader 2 1 | 2 |
+----+-------+---------------+-----------+
代碼:
<?php
$mysqli = new mysqli("localhost", "zz", "zz", "zz");
// fetch all menu items
$query = 'select * from header_menu order by parent_id';
$result = $mysqli->query($query);
$data = $result->fetch_all(MYSQLI_ASSOC);
var_dump($data);
// build menu with menus and their submenus
$menu = [];
foreach ($data as $row) {
if ($row['parent_id'] === null) {
$menu[$row['id']] = $row;
$menu[$row['id']]['submenus'] = [];
} else {
$menu[$row['parent_id']]['submenus'][] = $row;
}
}
var_dump($menu);
// now display it in html or however you want
foreach ($menu as $item) {
echo $item['content'].PHP_EOL;
foreach ($item['submenus'] as $subitem) {
echo ' '.$subitem['content'].PHP_EOL;
}
}
$數據:
array(6) {
[0]=>
array(4) {
["id"]=>
string(1) "1"
["href"]=>
string(5) "href1"
["content"]=>
string(7) "header1"
["parent_id"]=>
NULL
}
[1]=>
array(4) {
["id"]=>
string(1) "2"
["href"]=>
string(5) "href2"
["content"]=>
string(7) "header2"
["parent_id"]=>
NULL
}
[2]=>
array(4) {
["id"]=>
string(1) "3"
["href"]=>
string(5) "href3"
["content"]=>
string(7) "header3"
["parent_id"]=>
NULL
}
[3]=>
array(4) {
["id"]=>
string(1) "4"
["href"]=>
string(5) "href4"
["content"]=>
string(13) "subheader 1 1"
["parent_id"]=>
string(1) "1"
}
[4]=>
array(4) {
["id"]=>
string(1) "5"
["href"]=>
string(5) "href5"
["content"]=>
string(13) "subheader 1 2"
["parent_id"]=>
string(1) "1"
}
[5]=>
array(4) {
["id"]=>
string(1) "6"
["href"]=>
string(5) "href6"
["content"]=>
string(13) "subheader 2 1"
["parent_id"]=>
string(1) "2"
}
}
$菜單:
array(3) {
[1]=>
array(5) {
["id"]=>
string(1) "1"
["href"]=>
string(5) "href1"
["content"]=>
string(7) "header1"
["parent_id"]=>
NULL
["submenus"]=>
array(2) {
[0]=>
array(4) {
["id"]=>
string(1) "4"
["href"]=>
string(5) "href4"
["content"]=>
string(13) "subheader 1 1"
["parent_id"]=>
string(1) "1"
}
[1]=>
array(4) {
["id"]=>
string(1) "5"
["href"]=>
string(5) "href5"
["content"]=>
string(13) "subheader 1 2"
["parent_id"]=>
string(1) "1"
}
}
}
[2]=>
array(5) {
["id"]=>
string(1) "2"
["href"]=>
string(5) "href2"
["content"]=>
string(7) "header2"
["parent_id"]=>
NULL
["submenus"]=>
array(1) {
[0]=>
array(4) {
["id"]=>
string(1) "6"
["href"]=>
string(5) "href6"
["content"]=>
string(13) "subheader 2 1"
["parent_id"]=>
string(1) "2"
}
}
}
[3]=>
array(5) {
["id"]=>
string(1) "3"
["href"]=>
string(5) "href3"
["content"]=>
string(7) "header3"
["parent_id"]=>
NULL
["submenus"]=>
array(0) {
}
}
}
菜單結構的輸出:
header1
subheader 1 1
subheader 1 2
header2
subheader 2 1
header3
現在您可以輸出所有菜單項及其子菜單項,而不僅僅是菜單 ID 3。
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報