Php 计算以下多维数组中的子级数&;更新每个父级的成员数

Php 计算以下多维数组中的子级数&;更新每个父级的成员数,php,arrays,recursion,multidimensional-array,iteration,Php,Arrays,Recursion,Multidimensional Array,Iteration,对于下面的多维数组,我试图将每个父级子级的成员增加到其子级+子级+子级+子级+子级。。。。等等,但是我的递归循环在几次迭代后就卡住了。请检查下面的代码并帮助我改进。提前谢谢你 所需的输出应该是这样的:id=100的成员计数应该是 计算为9,依此类推,每个家长或作为家长的孩子 就我所知,你没有把孩子的成员数传给父母。对子级调用test()函数,但其结果永远不会添加到父级成员计数中。这样就行了 (请注意,我在$t[0]上调用了该函数,并在calc_children()函数中保存了额外的循环-如果该数

对于下面的多维数组,我试图将每个父级子级的成员增加到其子级+子级+子级+子级+子级。。。。等等,但是我的递归循环在几次迭代后就卡住了。请检查下面的代码并帮助我改进。提前谢谢你

所需的输出应该是这样的:id=100的成员计数应该是 计算为9,依此类推,每个家长或作为家长的孩子


就我所知,你没有把孩子的成员数传给父母。对子级调用test()函数,但其结果永远不会添加到父级成员计数中。这样就行了

(请注意,我在
$t[0]
上调用了该函数,并在
calc_children()
函数中保存了额外的循环-如果该数组中有多个条目,您可能希望循环
$t

$key
$array
的索引,而不是
$value['child']

您需要在
$value['child']
上执行另一个循环来计算其子对象。 而不是

    $array[$key]['member'] = count($value['child']);
    if ($value['child'])  {
        foreach ($value['child'] as $child_key => $child_value) {
            $array[$key]['member'] += count($child_value['child']);
        }
    }
您需要:


但是,结果仍然是错误的。

您尝试调试了什么?为什么循环没有结束,它走了多远?它在id为100的键1和键2的子项处断裂。。。0输出:100有3个子0输出:102有2个子0输出:103有2个子0输出:109有0子1输出:110有0子1输出:104有0子1输出:105有1子通知:未定义偏移量:1 in/home/kumardepak/public_html/Clients/disha/test.php第162行0输出:106有0子2输出:107有1子通知:未定义偏移量:2 in/home/kumardepak/public_html/Clients/disha/test.php第162行0输出:108有0 child@nicohaased,您尝试调试了什么?你读过这两个通知了吗?是的,我就是这么说的,它在键1的grand child 106处断开,发出第一个通知&然后在grand child 108处断开,发出第二个通知。。。我试图通过array\u key\u exists($key,$array)跳过此操作,但没有多大帮助@烟酰胺酶
function calc_children(&$parent)  {
    $parent['member'] = 0;
    if ($parent['child'])  {
        foreach($parent['child'] as $k => &$child)  { // make sure $child is a reference
            $parent['member']++; // count the child itself
            $parent['member'] += calc_children($child); // add the children of the child
        }
    }
    return $parent['member']; // return my members to my parent
}

calc_children($t[0]);

echo '<pre>';
print_r($t);
echo '</pre>';
count($value['child'][$key]['child']);
$array[$key]['member'] = count($value['child']) + count($value['child'][$key]['child']);
    $array[$key]['member'] = count($value['child']);
    if ($value['child'])  {
        foreach ($value['child'] as $child_key => $child_value) {
            $array[$key]['member'] += count($child_value['child']);
        }
    }