如何使用遞歸 PHP 函數從儲存在 MySQL 資料庫中的分層資料有效地產生 HTML 選單樹?

Mary-Kate Olsen
發布: 2024-10-29 18:34:02
原創
214 人瀏覽過

How can I efficiently generate an HTML menu tree from hierarchical data stored in a MySQL database using a recursive PHP function?

使用遞歸函數回顯選單樹

如果你有一個MySQL 資料庫,其中分層資料組織在不同的根下,你可能會遇到需要產生複製此結構的HTML 選單樹。這涉及到以遞歸方式顯示根類別及其子類別。

為了實現此目的,可以使用遞歸 PHP 函數來遍歷資料庫記錄並建立 HTML 標記。此函數需要類別資料以及可選的父標識符和深度等級。

此函數迭代類別,搜尋與指定父級相符的元素。如果找到匹配,它會產生一個

  • 。帶有包含類別名稱的錨標記的元素。然後,它遞歸地調用自身來獲取並附加子類別(如果有)。此過程持續進行,直到遍歷完層次結構的所有層級。

    以下修訂後的 PHP 函數包含最佳化以防止空

      。當沒有子類別時出現的元素:
    <code class="php">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>';
          $sub = $this->recurse($categories, $category['id'], $level + 1);
          if ($sub != '<ul></ul>') {
            $ret .= $sub;
          }
          $ret .= '</li>';
        }
      }
      return $ret . '</ul>';
    }</code>
    登入後複製

    為了提高效能,建議查詢資料庫以包含一個指示每個類別的子類別數量的欄位。此資訊可用於確定是否遞歸遍歷子類別:

    <code class="php">select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category</code>
    登入後複製

    透過此增強功能,可以相應地修改遞歸函數:

    <code class="php">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>';
    }</code>
    登入後複製
  • 以上是如何使用遞歸 PHP 函數從儲存在 MySQL 資料庫中的分層資料有效地產生 HTML 選單樹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板