我有一个数组,其结构类似于下面的结构。哪里有等级制度
[2] => Array
(
[sumW] => 200.39
[child] => Array
(
[3] => Array
(
[sumW] => 300.00
)
[4] => Array
(
[sumW] => 100.28
[child] => Array
(
[5] => Array
(
[sumW] => 600
)
[6] => Array
(
[sumW] => 150
)
)
)
[7] => Array
(
[sumW] => 30.00
[child] => Array
(
[8] => Array
(
[sumW] => 100.00
)
)
)
)
)
```
我不知道如何在数组的每个级别对每个数组求和。这样每个级别都有它自己和它下面的级别的总和。
所以,例如,像
[2] = [tot] => 1480.67
[3] = [tot] => 300.00
[4] = [tot] => 850.28
[5] = [tot] => 600.00
[6] = [tot] => 150.00
[7] = [tot] => 130.00
[8] = [tot] => 100.00
等等。
该数组可以是无限深的层次,这只显示 3 个层次,但我的层次结构可以扩展超过 3 个层次。
我试过弄乱数组总和并在数组中设置父/子 ID。我能做的最好的就是获得 2->3,4,7 的值。但我无法让 [2] 包含 [5] 和 [6] 及以后的值。
编辑:
这是我尝试过的一种方法。我的原始数据中有 parent_ids 和 category_ids。这让我的总和在每个级别都深了 1 级。但并没有总结层次结构中的所有内容。
$tot=[];
$getSum = function ($array, $pid = null) use (&$getSum, &$tot) {
$rpt = new Report;
foreach ($array as $item) {
// This returns my database value for this category.
$sum = $rpt->getCategoryTotal($item->category_id);
if($item->parent_id == $pid) {
if(!isset($tot[$item->category_id])){
$tot[$item->category_id] = $sum;
}
if(isset($tot[$item->parent_id])){
$tot[$item->parent_id] += $sum;
}
$child = $getSum($item->children, $item->category_id);
}
}
return $sum;
};
$result = $getSum($myDbData);
return dd($tot);