You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:递归统计树形结构中每个父节点的所有子节点数量

问题根源与修复方案

核心问题点

  1. 数据源缺失:你只查询了parent_id=0的根节点,但递归查找子节点需要所有节点的数据,当前$data里没有子节点记录,自然返回空数组。
  2. 字段名不匹配:函数里用$row['sys_id'],但数据库查询的是id字段,导致无法正确构建树形结构。
  3. 变量覆盖逻辑错误:循环中每次覆盖$d,最终仅输出最后一个根节点的结果,且因数据源错误结果为空。

修复后的代码实现

1. 修改children.php:获取全量节点数据并统计

// 先查询所有位置节点,确保递归时有完整数据
$r = mysqli_query($link, "SELECT `id`,`parent_id` FROM locations");
$allNodes = [];
while($row = mysqli_fetch_assoc($r)) {
    $allNodes[] = $row;
}

// 筛选出所有根节点(parent_id=0)
$rootNodes = array_filter($allNodes, function($node) {
    return $node['parent_id'] === '0';
});

// 遍历每个根节点,统计其所有递归子节点数量
foreach($rootNodes as $root) {
    // 方案1:先构建树形结构再统计
    $tree = buildtree($allNodes, $root['id']);
    $childCount = countAllChildren($tree);
    
    // 方案2:直接递归统计(无需构建树形结构,效率更高)
    // $childCount = countChildren($allNodes, $root['id']);
    
    echo "根节点ID {$root['id']} 的子节点总数:{$childCount}\n";
}

2. 修改/补充function.php的函数

// 修复后的树形结构构建函数(修正字段名)
function buildtree($src_arr, $parent_id, $tree = []) {
    foreach($src_arr as $idx => $row) {
        if($row['parent_id'] == $parent_id) {
            // 用数据库查询的`id`字段替代不存在的`sys_id`
            $tree[$row['id']] = $row;
            unset($src_arr[$idx]);
            $tree[$row['id']]['children'] = buildtree($src_arr, $row['id']);
        }
    }
    ksort($tree);
    return $tree;
}

// 递归统计树形结构中的所有子节点数量
function countAllChildren($tree) {
    $count = 0;
    foreach($tree as $node) {
        $count += 1; // 统计当前子节点
        if(!empty($node['children'])) {
            $count += countAllChildren($node['children']); // 递归统计子节点的子节点
        }
    }
    return $count;
}

// 可选:直接统计子节点数量(无需构建树形结构)
function countChildren($allNodes, $parent_id) {
    $count = 0;
    foreach($allNodes as $node) {
        if($node['parent_id'] == $parent_id) {
            // 当前节点+其所有子节点的数量
            $count += 1 + countChildren($allNodes, $node['id']);
        }
    }
    return $count;
}

内容的提问来源于stack exchange,提问作者SULTAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:15:57