「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 再帰を使用して、親カテゴリを持つデータベースからネストされたメニュー ツリーを生成するにはどうすればよいですか?

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

2024 年 11 月 7 日に公開
ブラウズ:134

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

メニュー ツリー生成のための再帰

あなたの状況では、カテゴリに親カテゴリを示す「ルート」フィールドがあるデータベース構造があります。 。必要な HTML 出力には、カテゴリ階層を表すネストされたリストが含まれます。これを実現するには、再帰的な PHP 関数を使用できます。

関数の例を次に示します。

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $ret .= $this->recurse($categories, $category['id'], $level 1); $ret .= '
  • '; } } return $ret . '
'; }

この関数は、ルート カテゴリに null 値の 'root' フィールドがあることを前提としています。カテゴリを反復処理し、「ルート」フィールドに基づいて子カテゴリを識別し、ネストされたリストを使用して HTML を構築します。

この関数を使用するには:

  1. データベースにクエリを実行して、カテゴリの多次元配列。
  2. カテゴリの配列と親パラメータとして null を使用して再帰関数を呼び出します。
  3. 戻り値を変数 ($Tree など) に代入します。
  4. $Tree 変数をエコーし​​て、入れ子になったメニュー ツリーを表示します。

オプションで、リストを作成する前にカテゴリに子カテゴリがあるかどうかを確認することで、空のリストを避けるように関数を変更できます。

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $sub = $this->recurse($categories, $category['id'], $level 1); if ($sub != '
      ') { $ret .= $sub; } $ret .= '
    • '; } } return $ret . '
    '; }

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

    最新のチュートリアル もっと>

    免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

    Copyright© 2022 湘ICP备2022001581号-3