簡體   English   中英

如何將菜單項的 MySQL 表變成用於網站導航的遞歸 PHP div

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM