首頁  >  文章  >  資料庫  >  如何使用 PHP 和 MySQL 建立無限嵌套選單系統:非遞歸方法?

如何使用 PHP 和 MySQL 建立無限嵌套選單系統:非遞歸方法?

Linda Hamilton
Linda Hamilton原創
2024-10-29 18:41:12492瀏覽

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

如何在PHP 和MySQL 中顯示無限巢狀選單

問題描述

在巢狀選單系統中,每個選單項目都可以有子選單項,它們又可以有自己的子項目。目標是有效地從資料庫中取得並顯示這些嵌套選單層級。

程式碼實作

為了實現這一點,我們可以採用一種非遞歸方法,其中涉及:

  • 資料庫查詢:我們查詢menu_item表,依其父級和位置對結果進行排序。
  • 多維數組 :我們將檢索到的選單項目組織成一個多維數組,其中每個元素代表一個父子關係。
  • 樹遍歷:我們使用循環遍歷這個陣列。
  • HTML 產生:我們動態產生巢狀選單的 HTML 結構。

PHP 函數

這是一個示範上述方法的PHP 函數:

<code class="php">function generateMenu($items) {
    $html = '';
    $parent = 0;
    $parentStack = array();

    $children = array();
    foreach ($items as $item) {
        $children[$item['parent_id']][] = $item;
    }

    while (($option = each($children[$parent])) || ($parent > 0)) {
        if (!empty($option)) {
            // 1) Item with children
            if (!empty($children[$option['value']['id']])) {
                $html .= '<li>' . $option['value']['title'] . '</li>';
                $html .= '<ul>';
                array_push($parentStack, $parent);
                $parent = $option['value']['id'];
            }
            // 2) Item without children
            else {
                $html .= '<li>' . $option['value']['title'] . '</li>';
            }
        }
        // 3) Current parent has no more children
        else {
            $html .= '</ul>';
            $parent = array_pop($parentStack);
        }
    }

    return $html;
}</code>

用法

要使用該函數,首先從資料庫中檢索選單項目並將它們作為數組傳遞給generateMenu() 函數。產生的 HTML 將是一系列嵌套的無序列表,表示分層選單結構。

非遞歸方法的好處

這種非遞歸方法消除了可能發生的無限循環的風險遞歸,使其成為產生嵌套選單的更穩定、更有效率的解決方案。

以上是如何使用 PHP 和 MySQL 建立無限嵌套選單系統:非遞歸方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn