You need to enable JavaScript to run this app. Laravel中如何动态统计动态嵌套数组内所有children数组的数量
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何动态统计动态嵌套数组内所有children数组的数量

嵌套children数量统计实现方案

原有代码的核心问题

原有逻辑存在两处明显缺陷:

  • $data[] = $request->children 的写法存在逻辑偏差,是把获取到的顶层children数组整体作为单个元素塞入新数组,循环计数时永远只会得到固定值1,完全没有遍历children数组本身的元素
  • 整体逻辑仅停留在最顶层数据,没有对下级嵌套的children做递归遍历,遇到多层嵌套时根本触达不到深层级的children结构,计数结果完全失真。

适配Laravel环境的实现逻辑

针对无固定深度的动态树结构,最稳妥的方式是采用递归遍历的方式逐层级检查每个节点的children字段,全程不需要写死嵌套层数,兼容任意深度的结构:

  • 从请求中获取完整的根节点数据(不要仅截取最外层children传入处理)
  • 对每个节点做检查:如果节点下存在格式合法的children数组,就先统计当前children数组的元素长度,计入总计数
  • 把当前children里的每个子节点传入递归流程,重复做检查和统计,直到遇到没有children字段的叶子节点为止

可直接复用的代码

首先定义递归计数的通用方法,可放在控制器类内、或抽成独立的服务方法复用:

/**
 * 递归统计所有嵌套层级的children数组总元素数
 * @param array|object $node 遍历起始的树节点
 * @return int 累计总数量
 */
function countAllNestedChildren($node): int
{
    $total = 0;
    // 兼容对象、数组两种节点格式,避免Laravel请求自动转对象带来的取值问题
    $nodeData = is_object($node) ? (array)$node : $node;
    // 校验当前节点存在合法的children数组
    if (isset($nodeData['children']) && is_array($nodeData['children'])) {
        // 计入当前层级children的元素数量
        $total += count($nodeData['children']);
        // 递归遍历每个子节点,累加子节点下的children计数
        foreach ($nodeData['children'] as $childNode) {
            $total += countAllNestedChildren($childNode);
        }
    }
    return $total;
}

在控制器方法中直接调用即可,无需额外依赖:

public function getChildrenCount(Request $request)
{
    // 取完整的请求根节点数据
    $rootNode = $request->all();
    $totalCount = countAllNestedChildren($rootNode);
    return response()->json([
        'total_children_count' => $totalCount
    ]);
}

示例验证

针对你给出的测试JSON结构,各层级的children分布为:

  • lv0 节点下的children 长度为1
  • lv1 节点下的children 长度为1
  • lv2 节点下的children 长度为1
  • lv3 节点无children字段
    最终统计得到的总数量为3,和实际结构完全匹配,旧代码仅能统计出1的结果。

注意事项

  • 递归处理时要传完整的根节点,不要仅把顶层children传入方法,否则会漏算第一层的children数量
  • 必须加children字段存在性校验,避免叶子节点无children字段时触发运行时报错
  • 该逻辑无强框架耦合,后续如果是从数据库取出的嵌套树数据,也可以直接复用该方法统计数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 22:57:01