PHPで無限階層の木構造を実装する方法
PHPで無限階層の木構造を実装するには、次の手順を実行します。
- 木のノードを格納するために多次元配列を作成します。各ノードには、ユニークな ID、親ノード ID、名前、その他の関連データが含まれる必要があります。
- 配列を順番に見ていき、各要素を対応する親要素の子として挿入する。ここでは、再帰関数を使用する。
- 各ノードに、「children」という属性を追加し、子ノードを保持する。
- 再帰的に木のノードを走査し、子ノードを親ノードの「children」プロパティーに追加します。
- 階層なしの無限の木構造を最終的に得る。
以下のコード例をご覧ください。
function buildTree($data, $parentId = 0) {
$tree = array();
foreach ($data as $node) {
if ($node['parent_id'] == $parentId) {
$children = buildTree($data, $node['id']);
if ($children) {
$node['children'] = $children;
}
$tree[] = $node;
}
}
return $tree;
}
// 示例数据
$data = array(
array('id' => 1, 'parent_id' => 0, 'name' => 'Node 1'),
array('id' => 2, 'parent_id' => 0, 'name' => 'Node 2'),
array('id' => 3, 'parent_id' => 1, 'name' => 'Node 1.1'),
array('id' => 4, 'parent_id' => 1, 'name' => 'Node 1.2'),
array('id' => 5, 'parent_id' => 2, 'name' => 'Node 2.1'),
array('id' => 6, 'parent_id' => 2, 'name' => 'Node 2.2'),
array('id' => 7, 'parent_id' => 3, 'name' => 'Node 1.1.1'),
);
$tree = buildTree($data);
print_r($tree);
例にとげた場合、関数buildTree は多次元配列と親ノードID を引数に受け取ります。それは最初に配列を巡回し、同じ親ノードID を持つすべてのノードを見つけ、その後再帰呼出し関数buildTree でそれらのノードの子ノードを見つけます。最後に、それは子ノードを親ノードの「children」属性に追加し、完全な無限階層構造を返します。