首頁 >資料庫 >mysql教程 >如何使用遞歸從具有父類別的資料庫產生巢狀選單樹?

如何使用遞歸從具有父類別的資料庫產生巢狀選單樹?

Susan Sarandon
Susan Sarandon原創
2024-10-30 01:41:28224瀏覽

How can recursion be used to generate a nested menu tree from a database with parent categories?

選單樹產生的遞迴

在您的情況下,您有一個資料庫結構,其中類別有一個「根」欄位指示其父類別。您想要的 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>';
            $ret .= $this->recurse($categories, $category['id'], $level + 1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}</code>

此函數假設根類別有一個值為空值的「root」欄位。它迭代類別,根據“根”字段識別子類別,並使用嵌套列表構建 HTML。

要使用此函數:

  1. 查詢資料庫以取得多維類別數組。
  2. 以類別數組和 null 作為父參數呼叫遞歸函數。
  3. 將回傳值指派給變數(例如 $Tree)。
  4. 回顯 $Tree 變數以顯示巢狀選單樹。

(可選)您可以修改函數,透過在建立清單之前檢查類別是否有子類別來避免空白清單:

<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>

此修改後的函數僅在類別至少有一個子類別時才會建立清單。

以上是如何使用遞歸從具有父類別的資料庫產生巢狀選單樹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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