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 サイトの他の関連記事を参照してください。