ホームページ  >  記事  >  バックエンド開発  >  PHP での無限分類の再帰的実装

PHP での無限分類の再帰的実装

王林
王林オリジナル
2023-05-07 11:32:072614ブラウズ

Web 開発では、分類は非常に一般的な機能です。そして、無限分類とは、その名の通り、無限のレベルに応じて分類することです。フロントエンドとバックエンドの間の対話プロセスでは、この分類を達成するために特定の方法を使用する必要があり、PHP の再帰もその 1 つです。

1. 再帰とは

再帰とは、プログラムの実行中に自分自身を呼び出す手法を指します。再帰を通じて、複雑な問題を単純なものに単純化することができ、それによって問題をより適切に解決できます。 PHP で再帰を使用するには、再帰の 2 つの要素、再帰終了条件と再帰式を明確にする必要があります。

再帰終了条件とは、再帰が終了するときの判定条件のことで、通常、ある深さ、状態、または、ある値に到達したことを指します。再帰処理中に終了条件がない場合、プログラムは無限ループに陥ります。

再帰式とは、再帰プロセス中に再帰操作を継続して実行することを指します。通常、再帰式は、関数自体を呼び出すことによって再帰関数内に実装されます。

2. 再帰を使用して無限分類を実現する方法

再帰を使用して無限分類を実現できます。具体的には、特定のレベルの分類リストを表す配列であるパラメーターを受け取る再帰関数を定義できます。再帰的な操作は関数内で実行され、各カテゴリが順番に走査されます。このカテゴリにサブカテゴリがある場合、そのサブカテゴリは再帰関数を通じて走査されます。トラバーサルの最後に、カテゴリカル配列全体が返されます。

具体的な実装は次のとおりです:

function infiniteCategory($data, $pid = 0, $level = 0)
{
    static $result = array();
    foreach ($data as $key => $value) {
        if ($value['parent_id'] == $pid) {
            $value['level'] = $level;
            $result[] = $value;
            infiniteCategory($data, $value['id'], $level + 1);
        }
    }
    return $result;
}

分析は次のとおりです:

(1) この関数は 3 つのパラメータを受け取ります。1 つは分類リスト配列 $data、もう 1 つは親 ID で、デフォルトの $pid は 0 で、もう 1 つは $level で、デフォルトは 0 です。

(2) 最終的な分類結果を格納する静的変数を定義します。

(3) foreach ループを通じてカテゴリ リストを走査します。カテゴリのparent_id が $pid と等しい場合、このカテゴリが現在のレベルに属し、最終結果配列 $result に追加されることを意味します。 。

(4) 次に、再帰関数を呼び出して、現在のカテゴリの ID を $pid として渡し、$level 1 を次の分類レベルのレベルとして渡します。

(5) 走査が完了したら、結果の配列を返します。

テストしてみましょう:

$data = array(
    array('id' => 1, 'name' => '电脑', 'parent_id' => 0),
    array('id' => 2, 'name' => '手机', 'parent_id' => 0),
    array('id' => 3, 'name' => '笔记本', 'parent_id' => 1),
    array('id' => 4, 'name' => '台式机', 'parent_id' => 1),
    array('id' => 5, 'name' => '智能手机', 'parent_id' => 2),
    array('id' => 6, 'name' => '非智能手机', 'parent_id' => 2),
    array('id' => 7, 'name' => '微型笔记本', 'parent_id' => 3),
    array('id' => 8, 'name' => '超级台式机', 'parent_id' => 4),
    array('id' => 9, 'name' => '小型台式机', 'parent_id' => 4),
);

var_dump(infiniteCategory($data));

実行結果は次のとおりです:

array(9) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "电脑"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(9) "笔记本"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(7)
    ["name"]=>
    string(15) "微型笔记本"
    ["parent_id"]=>
    int(3)
    ["level"]=>
    int(2)
  }
  [3]=>
  array(4) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(9) "台式机"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [4]=>
  array(4) {
    ["id"]=>
    int(9)
    ["name"]=>
    string(18) "小型台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [5]=>
  array(4) {
    ["id"]=>
    int(8)
    ["name"]=>
    string(18) "超级台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [6]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "手机"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [7]=>
  array(4) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(12) "智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
  [8]=>
  array(4) {
    ["id"]=>
    int(6)
    ["name"]=>
    string(15) "非智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
}

ご覧のとおり、分類リストは、 level フィールドの値で、各カテゴリが位置するレベルを確認できます。

3. まとめ

Infinitus 分類を再帰的に実現する手法は、Web 開発における分類機能を迅速に完成させることができ、柔軟性が高いです。再帰を使用する場合、終了条件の設定に注意しないと無限ループに陥る可能性があります。

以上がPHP での無限分類の再帰的実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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