私はインターネットを見回しましたが、探しているものがまったく見つかりませんでした。「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;
}
}
$ブランチを返します。
}