PHPで再帰的な関数を使用して無限階層のカテゴリを実装する方法
PHP を用いて無限階分類の再帰を実装する手順は以下のとおりです。
- 一意的な識別子と親カテゴリー識別子を持つ分類データをデータベースから取得または配列を作成する
- 分類データと親カテゴリーidを受け取り、再帰的に動作する関数を作成
- 再帰関数で、階層データの探索を行い、親分類IDが、現在渡された親IDと等しい分類を探す。
- 経路分けの処理において、見つけた分類を新しい配列に追加し、再帰関数を呼び出す際には、現在発見した分類IDを親IDとして渡す。
- 条件に合致する分類がなくなるまで再帰関数が動作し、最終的な分類の配列を返します。
以下にサンプルコードを示します。
function buildTree($categories, $parent_id = 0) {
$tree = array();
foreach ($categories as $category) {
if ($category['parent_id'] == $parent_id) {
$children = buildTree($categories, $category['id']);
if ($children) {
$category['children'] = $children;
}
$tree[] = $category;
}
}
return $tree;
}
// 示例数据
$categories = array(
array('id' => 1, 'parent_id' => 0, 'name' => '分类1'),
array('id' => 2, 'parent_id' => 0, 'name' => '分类2'),
array('id' => 3, 'parent_id' => 1, 'name' => '分类1-1'),
array('id' => 4, 'parent_id' => 1, 'name' => '分类1-2'),
array('id' => 5, 'parent_id' => 3, 'name' => '分类1-1-1'),
array('id' => 6, 'parent_id' => 2, 'name' => '分类2-1'),
array('id' => 7, 'parent_id' => 0, 'name' => '分类3'),
);
$result = buildTree($categories);
print_r($result);
上述のコードを実行すると、再帰的に生成された分類木のツリー構造の配列が出力されます。