PHP でフラット配列からツリー構造を構築する
問題:
「id」フィールドと「parent_id」フィールドを持つ要素で構成されるフラット配列。各要素には最大でも1 人の親と 0 人以上の子。 「parent_id」が 0 の場合、その要素はルート レベルの項目です。目標は、このフラットな配列を子と親の関係を持つ階層ツリーに再構築することです。
解決策:
提供されている関数 buildTree() がこのタスクを効果的に実行します。入力配列を反復処理し、ツリー構造を再帰的に構築します。出力ツリーの各要素には、その ID、親 ID、および子要素の配列が含まれます。
実装:
function buildTree(array &$elements, $parentId = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent_id'] == $parentId) { $children = buildTree($elements, $element['id']); if ($children) { $element['children'] = $children; } $branch[] = $element; unset($elements[$element['id']]); } } return $branch; }
「unset」 Call:
上記のコードでは、unset() 呼び出しは、階層構造。元の入力配列から処理された要素を削除し、ツリー内で要素が重複しないようにします。
例:
指定された入力配列を考慮します:
[_319_] => [...], [_320_] => [...], [_321_] => [...], [_322_] => [...], [_323_] => [...], [_324_] => [...], [_325_] => [...]
処理後、出力ツリーは親子関係を維持します関係:
[_319_] => [...], [_320_] => [ 'id' => '_320_', 'parent_id' => 0, 'children' => [ [_321_] => [...], [_325_] => [...] ] ], [_323_] => [ 'id' => '_323_', 'parent_id' => 0, 'children' => [ [_324_] => [...] ] ]
したがって、buildTree() 関数を使用すると、親子関係を持つ要素のフラットな配列を PHP の構造化された階層ツリーに変換できます。
以上がPHP でフラット配列から階層ツリー構造を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。