私はインターネットを見回しましたが、探しているものがまったく見つかりませんでした。「id」と「parent_id」を含む各要素を持つフラットな配列があります。各要素には 1 つの親しかありませんが、複数の子を持つことができます。parent_id = 0 の場合、ルート レベルのアイテムと見なされます。フラット配列をツリーに入れようとしています。私が見つけた他のサンプルは、要素を親にコピーするだけで、オリジナルはまだ存在しています。
編集
開始配列の各要素は、個別の XML ファイルから読み取られます。親がない場合、ファイル自体のparent_idの値は「0」になります。キーは実際には文字列です。
先程は混乱させて申し訳ありませんでした。うまくいけば、これはより明確です:
/編集
私の開始配列:
配列 ( [_319_] => 配列 ( [id] => 0 [親ID] => 0 ) [_320_] => 配列 ( [ID] => _320_ [親ID] => 0 ) [_321_] => 配列 ( [ID] => _321_ [parent_id] => _320_ ) [_322_] => 配列 ( [id] => _322_ [parent_id] => _321_ ) [_323_] => 配列 ( [ID] => _323_ [親ID] => 0 ) [_324_] => 配列 ( [ID] => _324_ [parent_id] => _323_ ) [_325_] => 配列 ( [id] => _325_ [parent_id] => _320_ ) )
ツリーが作成された後の結果の配列:
配列 ( [_319_] => 配列 ( [ID] => _319_ [親ID] => 0 ) [_320_] => 配列 ( [ID] => _320_ [親ID] => 0 [子] => 配列 ( [_321_] => 配列 ( [ID] => _321_ [parent_id] => _320_ [子] => 配列 ( [_322_] => 配列 ( [id] => _322_ [parent_id] => _321_ ) ) ) [_325_] => 配列 ( [id] => _325_ [parent_id] => _320_ ) ) [_323_] => 配列 ( [ID] => _323_ [親ID] => 0 [子] => 配列 ( [_324_] => 配列 ( [ID] => _324_ [parent_id] => _323_ ) ) )
どんな助け/指導も大歓迎です!
私がこれまでに持っているいくつかのコード:
function buildTree(array &$elements, $parentId = 0) { $branch = 配列(); foreach ($elements as $element) { if ($element['parent_id'] == $parentId) { $children = $this->buildTree($elements, $element['id']); if ($children) { $element['children'] = $children; } $branch[] = $element; } } $ブランチを返します。 }