首頁 >資料庫 >mysql教程 >如何在 PHP/MySQL 中不使用遞歸來建立無序列表選單樹?

如何在 PHP/MySQL 中不使用遞歸來建立無序列表選單樹?

Patricia Arquette
Patricia Arquette原創
2024-11-03 19:24:29866瀏覽

How to Build an Unordered List Menu Tree in PHP/MySQL Without Recursion?

PHP/MySQL 無序列表選單樹建構:非遞迴單一資料庫查詢方法

從資料庫查詢一項共同的任務。通常,使用多次查詢資料庫的遞歸函數。然而,使用單一資料庫查詢可以使用更有效的非遞歸方法。

給定一個具有 id、title 和parent_id 屬性的頁面物件數組,目標是建立一個函數來產生 HTML無序列表選單。

解決方案:

我們的解決方案採用以下步驟:

  1. 建立一個輔助函數has_children,以確定如果給定的children,以確定如果給定的children parent_id在數組中有任何子項。
  2. 實作一個build_menu函數,迭代頁面物件並遞歸建構選單列表。
  3. 使用初始父ID 0呼叫build_menu以建立選單樹的根。

代碼:

<code class="php">function has_children($rows, $id) {
  foreach ($rows as $row) {
    if ($row['parent_id'] == $id){
      return true;
    }
  }
  return false;
}

function build_menu($rows, $parent=0) {
  $result = "<ul>";
  foreach ($rows as $row) {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$row['title']}";
      if (has_children($rows,$row['id'])) {
        $result.= build_menu($rows,$row['id']);
      }
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}</code>

用法示例:

<code class="php">$menu = [
  ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null],
  ... // Additional menu objects
];

echo build_menu($menu); // Outputs the complete menu list</code>

優點:

  • 非遞歸方法消除了堆疊溢位的風險。
  • 單一資料庫查詢確保高效率的資料擷取。
  • 模組化設計有利於可維護性和可重複使用性。

以上是如何在 PHP/MySQL 中不使用遞歸來建立無序列表選單樹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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