我已经看过互联网,还没有找到我正在寻找的东西。我有一个平面数组,每个元素包含一个’id’和’parent_id’。每个元素只能有一个父项,但可能有多个子元素。如果parent_id = 0,则将其视为根级别项。我试图让我的平面阵列成树。我发现的其他样本只能将元素复制到父代,但原始的仍然存在。
编辑
从单独的XML文件读取起始数组的每个元素。如果文件没有父文件,文件本身将具有’0’作为parent_id的值。键实际上是字符串。
我很抱歉早期的混乱。希望这个更清楚:
/编辑
我的起始数组:
Array
(
[_319_] => Array
(
[id] => 0
[parent_id] => 0
)
[_320_] => Array
(
[id] => _320_
[parent_id] => 0
)
[_321_] => Array
(
[id] => _321_
[parent_id] => _320_
)
[_322_] => Array
(
[id] => _322_
[parent_id] => _321_
)
[_323_] => Array
(
[id] => _323_
[parent_id] => 0
)
[_324_] => Array
(
[id] => _324_
[parent_id] => _323_
)
[_325_] => Array
(
[id] => _325_
[parent_id] => _320_
)
)
树后生成的数组:
Array
(
[_319_] => Array
(
[id] => _319_
[parent_id] => 0
)
[_320_] => Array
(
[id] => _320_
[parent_id] => 0
[children] => Array
(
[_321_] => Array
(
[id] => _321_
[parent_id] => _320_
[children] => Array
(
[_322_] => Array
(
[id] => _322_
[parent_id] => _321_
)
)
)
[_325_] => Array
(
[id] => _325_
[parent_id] => _320_
)
)
[_323_] => Array
(
[id] => _323_
[parent_id] => 0
[children] => Array
(
[_324_] => Array
(
[id] => _324_
[parent_id] => _323_
)
)
)
任何帮助/指导非常感谢!
一些代码到目前为止:
function buildTree(array &$elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = $this->buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}