如何在递归生成的树中对从子项到父项的值求和?
How to sum values from children up to parent in a recursive made tree?
我有一个由递归函数构建的数组树。现在,我希望所有项目都包含一个 notices/warnings 计数器。只是一个数字,显示该项目有多少 'notices'。
现在进入正题。我希望所有项目都显示来自其自身及其子项的通知总数。但是递归函数是从顶级父级开始构建并向下构建的。所以通知的统计方式是错误的。
像这样:
Item 1 (3)
- - - Item 1.1 (1)
- - - Item 1.2 (2)
- - - - - - Item 1.2.1 (1)
- - - - - - Item 1.2.2 (1)
Item 2 (1)
- - - Item 2.1 (0)
- - - Item 2.2 (1)
这是我的递归函数(简化):
<?php
public function tree($item_id)
{
global $wpdb;
$q = $wpdb->get_results("SELECT * FROM items WHERE parent_item_id = '".$item_id."'", "ARRAY_A");
foreach ($q as $key => $r)
{
$return[$key] = $r;
$return[$key]['notices'] = 1;
$return[$key]['children'] = $this->tree($r['item_id']);
}
return $return;
}
?>
为什么不先调用 tree
函数,然后将 notices
字段的总和添加到父字段的总和?
$c_info = $this->tree($r['item_id']);
$sum = 0;
foreach ($c_info as $c_key => $c_data)
{
$sum += $c_data['notices'];
}
$return[$key]['children'] = $c_info;
$return[$key]['notices'] = 1 + $sum;
我有一个由递归函数构建的数组树。现在,我希望所有项目都包含一个 notices/warnings 计数器。只是一个数字,显示该项目有多少 'notices'。
现在进入正题。我希望所有项目都显示来自其自身及其子项的通知总数。但是递归函数是从顶级父级开始构建并向下构建的。所以通知的统计方式是错误的。
像这样:
Item 1 (3)
- - - Item 1.1 (1)
- - - Item 1.2 (2)
- - - - - - Item 1.2.1 (1)
- - - - - - Item 1.2.2 (1)
Item 2 (1)
- - - Item 2.1 (0)
- - - Item 2.2 (1)
这是我的递归函数(简化):
<?php
public function tree($item_id)
{
global $wpdb;
$q = $wpdb->get_results("SELECT * FROM items WHERE parent_item_id = '".$item_id."'", "ARRAY_A");
foreach ($q as $key => $r)
{
$return[$key] = $r;
$return[$key]['notices'] = 1;
$return[$key]['children'] = $this->tree($r['item_id']);
}
return $return;
}
?>
为什么不先调用 tree
函数,然后将 notices
字段的总和添加到父字段的总和?
$c_info = $this->tree($r['item_id']);
$sum = 0;
foreach ($c_info as $c_key => $c_data)
{
$sum += $c_data['notices'];
}
$return[$key]['children'] = $c_info;
$return[$key]['notices'] = 1 + $sum;