ホームページ >データベース >mysql チュートリアル >再帰を使用して、親カテゴリを持つデータベースからネストされたメニュー ツリーを生成するにはどうすればよいですか?

再帰を使用して、親カテゴリを持つデータベースからネストされたメニュー ツリーを生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 01:41:28219ブラウズ

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>

この関数は、ルート カテゴリに null 値の '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>

この変更された関数は、カテゴリに少なくとも 1 つの子がある場合にのみリストを作成します。

以上が再帰を使用して、親カテゴリを持つデータベースからネストされたメニュー ツリーを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。