我有平面阵列,例如:
[
{
"id": "1",
"parentId": "0",
"cost": 1000
},
{
"id": "2",
"parentId": "1",
"cost": 2000
},
{
"id": "3",
"parentId": "2",
"cost": 4000
},
...
]
要求:
- 将平面数组转换为树数组--〉(完成)
- 每个id的总和是它与其子项的总价
现在出现问题:
- 从平面数组转换为树数组之前或之后*应该进行求和
这是我的代码是尝试转换平面到树:
public function buildTree(array $flat)
{
$grouped = [];
$fnBuilder = function ($companies) use (&$fnBuilder, $grouped) {
foreach ($companies as $k => $company) {
$id = $company['id'];
if (isset($grouped[$id])) {
$company['children'] = $fnBuilder($grouped[$id]);
}
$companies[$k] = $company;
}
return $companies;
};
return $fnBuilder($grouped[0]);
}
我的预期结果如下:
[
{
"id": "1",
"sum": 7000,
"children": [
{
"id": "2",
"sum": 6000,
"children": [
{
"id": "3",
"sum": 4000,
},
我想知道是否可以在buildTree内部处理求和?
2条答案
按热度按时间lzfw57am1#
我创建了一个班级并采纳了你的想法。
wwwo4jvm2#
你可以不使用递归来构建树,然后使用递归来更新和,按照后序深度的第一顺序:
运行示例: