[英]How to make MySQL table of menu items into recursive PHP divs for website nav
我正在嘗試獲取一個將生成菜單 div 結構的 PHP 函數。
我正在使用 Meekrodb 連接到 MySQL。
Meekrodb 將數據返回到數組
$menu_results = DB::query("SELECT mi.id, mi.display, mi.parent_item, mi.sort
FROM ibtstl_menu_items mi
WHERE mi.state = 1 AND mi.fk_menu = 1
ORDER BY mi.sort");
所以$menu_results
數組有數據:
Array
(
[0] => Array
(
[id] => 1
[display] => Repertoire
[parent_item] => 0
[sort] => 1.0000
)
[1] => Array
(
[id] => 9
[display] => Search repertoire
[parent_item] => 1
[sort] => 1.0100
)
[2] => Array
(
[id] => 3
[display] => Add new chart
[parent_item] => 1
[sort] => 1.0500
)
[3] => Array
(
[id] => 4
[display] => Add new composer / lyricist
[parent_item] => 1
[sort] => 1.0501
)
[4] => Array
(
[id] => 5
[display] => Add new tag
[parent_item] => 1
[sort] => 1.0502
)
[5] => Array
(
[id] => 6
[display] => Reports
[parent_item] => 1
[sort] => 1.0800
)
[6] => Array
(
[id] => 7
[display] => Public repertoire list
[parent_item] => 6
[sort] => 1.0801
)
[7] => Array
(
[id] => 8
[display] => Gigs
[parent_item] => 0
[sort] => 3.0000
)
[8] => Array
(
[id] => 11
[display] => Search gigs
[parent_item] => 8
[sort] => 3.0010
)
[9] => Array
(
[id] => 10
[display] => Add new gig
[parent_item] => 8
[sort] => 3.0020
)
[10] => Array
(
[id] => 2
[display] => Videos
[parent_item] => 0
[sort] => 5.0000
)
[11] => Array
(
[id] => 12
[display] => Search videos
[parent_item] => 2
[sort] => 5.0010
)
[12] => Array
(
[id] => 13
[display] => Add new video
[parent_item] => 2
[sort] => 5.0200
)
)
我在這里和其他網站上查看了數十個答案,但我似乎無法理解。
它可能分為兩部分:我可能需要處理這個數組,以便子項是父項中的數組? 我看到這是一種方法。 然后我需要一個遞歸函數來處理它,這樣我就可以
<div>
<a href="#">Repertoire</a>
<div>
<a href="#">Search repertoire</a>
<a href="#">Add new chart</a>
<a href="#">Add new composer / lyricist</a>
<a href="#">Add new tag</a>
<a href="#">Reports</a>
<div>
<a href="#">Public repertoire list</a>
</div>
</div>
<a href="#">Gigs</a>
<div>
<a href="#">Search gigs</a>
<a href="#">Add new gig</a>
</div>
<a href="#">Videos</a>
<div>
<a href="#">Search videos</a>
<a href="#">Add new video</a>
</div>
</div>
任何幫助,將不勝感激!
謝謝
考慮查詢中提到的 $menu_results 數組
echo "<div>";
$sunsubmenucount = 0;
foreach ($menu_results as $menu_results_key => $parent)
{
if($parent['parent_item']==0)
{
echo"<a href='#'>".$parent['display']."</a>";
echo"<div>";
foreach ($menu_results as $submenu_key => $submenu_value)
{
if($submenu_value['parent_item']==$parent['id'])
{
echo"<a href='#'>".$submenu_value['display']."</a>";
foreach ($menu_results as $sub_submenu_key => $sub_submenu_value)
{
if($sub_submenu_value['parent_item'] == $submenu_value['id'] && array_search($submenu_value['id'], array_column($menu_results, 'parent_item')))
{
if($sunsubmenucount==0)
{
echo"<div>";
}
$sunsubmenucount ++;
echo"<a href='#'>".$sub_submenu_value['display']."</a>";
}
}
if($sunsubmenucount!=0)
{
echo"</div>";
$sunsubmenucount = 0;
}
}
}
echo"</div>";
}
}
echo "</div>";
希望這會有所幫助。
我最終找到的答案在這里:https://stackoverflow.com/questions/10782810/echo-menu-tree-with-recursive-function
將ChildCount
添加到選擇中
select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category
function recurse($categories, $parent = null, $level = 0)
{
$ret = '<ul>';
foreach($categories as $index => $category)
{
if($category['root'] == $parent)
{
$ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
if($category['ChildCount'] > 0)
$ret .= $this->recurse($categories, $category['id'], $level+1);
$ret .= '</li>';
}
}
return $ret . '</ul>';
}
將<UL>
更改為<div>
並刪除<LI>
並且效果很好。
遞歸地,因此可以在我的菜單中添加更多層(如果需要)並且它們會自動顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.