首頁 > 資料庫 > mysql教程 > 如何使用遞歸函數從分層 MySQL 資料庫表產生多層 HTML 選單樹?

如何使用遞歸函數從分層 MySQL 資料庫表產生多層 HTML 選單樹?

Mary-Kate Olsen
發布: 2024-10-29 06:48:31
原創
632 人瀏覽過

How can a recursive function be used to generate a multi-level HTML menu tree from a hierarchical MySQL database table?

使用遞歸函數回顯選單樹

問題:
為特定資料結構建構子是一個共同的挑戰。這是需要遞歸函數來顯示分層選單的情況。

情況:
給定一個 MySQL 資料庫表,其中根列指示每筆記錄的父類別,建立具有多個層級的 HTML 選單樹。所需的HTML 結構為:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<code class="html"><li><a href="#"><p class="Tier0">Datori</p></a>

    <ul style="display: block">

        <li><a href="#"><p class="Tier1">Cookies</p></a></li>

        <li><a href="#"><p class="Tier1">Events</p></a></li>

        <li><a href="#"><p class="Tier1">Forms</p></a></li>

        <li><a href="#"><p class="Tier1">Games</p></a></li>

        <li><a href="#"><p class="Tier1">Images</p></a>

            <ul>

                <li><a href="#"><p class="Tier2">CSS</p></a></li>

                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>

                <li><a href="#"><p class="Tier2">JQuery</p></a></li>

            </ul>

        </li>

        <li><a href="#"><p class="Tier1">Navigations</p></a>

            <ul>

                <li><a href="#"><p class="Tier2">CSS</p></a></li>

                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>

                <li><a href="#"><p class="Tier2">JQuery</p></a></li>

            </ul>

        </li>

        <li><a href="#"><p class="Tier1">Tabs</p></a></li>

    </ul>

</li>

<li><a href="#"><p class="Tier0">Washing Machines</p></a></li></code>

登入後複製

函數:
產生HTML 樹結構的遞歸函數如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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

登入後複製

執行:

1

2

3

4

5

6

7

8

<code class="php">// Fetch categories from the database

$categories = { get from database into a multi-dimensional array };

 

// Generate HTML tree

$Tree = $this->recurse($categories);

 

// Output the result

echo $Tree;</code>

登入後複製

最佳化:
防止空巢狀

    對於沒有子類別的父類別元素,修改函數如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

登入後複製

為了獲得最佳效能,可以考慮在資料庫表中新增一個ChildCount 資料列,表示每個父類別的子類別數量,並修改相應地發揮作用。這避免了遞歸期間不必要的資料庫查找。

以上是如何使用遞歸函數從分層 MySQL 資料庫表產生多層 HTML 選單樹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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