转换平面对象数组介绍树
Transform flat array of objects intro tree
我有一个像这样的平面对象数组:
[
{
id: "a",
parent-id: ""
},
{
id: "b",
parent-id: "a"
},
{
id: "c",
parent-id: "b"
},
{
id: "d",
parent-id: ""
},
...
]
我想将这个平面数组解析为树结构,其中具有父 ID 的对象作为其父元素的子元素插入,如下所示:
[
{
id: "a",
parent-id: "",
children: [
{
id: "b",
parent-id: "a",
children: [
{
id: "c",
parent-id: "b"
}
]
}
]
},
{
id: "d",
parent-id: ""
},
...
]
转换发生在客户端还是服务端并不重要,所以我的选择是PHP或者JS。最简单的方法是什么?
在PHP你可以试试:
$foo = // your flat array of associative arrays
// add the top level nodes to an array
$result = array();
foreach ($foo as $node) {
if ($node['parent-id'] === '') {
$node['children'] = array();
array_push($result, $node);
}
}
// recursively iterate this array adding the children
addChildrenToArray($result, $foo);
function addChildrenToArray(&$array, $children) {
$parent_i = 0;
$child_i = 0;
foreach ($array as $parent_node) {
foreach ($children as $child_node) {
if ($child_node['parent-id'] == $parent_node['id']) {
$child_node['children'] = array();
array_push($array[$parent_i]['children'], $child_node);
addChildrenToArray($array[$parent_i]['children'], $children);
$child_i++;
}
}
$parent_i++;
}
}
我有一个像这样的平面对象数组:
[
{
id: "a",
parent-id: ""
},
{
id: "b",
parent-id: "a"
},
{
id: "c",
parent-id: "b"
},
{
id: "d",
parent-id: ""
},
...
]
我想将这个平面数组解析为树结构,其中具有父 ID 的对象作为其父元素的子元素插入,如下所示:
[
{
id: "a",
parent-id: "",
children: [
{
id: "b",
parent-id: "a",
children: [
{
id: "c",
parent-id: "b"
}
]
}
]
},
{
id: "d",
parent-id: ""
},
...
]
转换发生在客户端还是服务端并不重要,所以我的选择是PHP或者JS。最简单的方法是什么?
在PHP你可以试试:
$foo = // your flat array of associative arrays
// add the top level nodes to an array
$result = array();
foreach ($foo as $node) {
if ($node['parent-id'] === '') {
$node['children'] = array();
array_push($result, $node);
}
}
// recursively iterate this array adding the children
addChildrenToArray($result, $foo);
function addChildrenToArray(&$array, $children) {
$parent_i = 0;
$child_i = 0;
foreach ($array as $parent_node) {
foreach ($children as $child_node) {
if ($child_node['parent-id'] == $parent_node['id']) {
$child_node['children'] = array();
array_push($array[$parent_i]['children'], $child_node);
addChildrenToArray($array[$parent_i]['children'], $children);
$child_i++;
}
}
$parent_i++;
}
}