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

PHP将嵌套foreach遍历树形结构改写为任意深度递归函数

多层嵌套foreach改写动态递归实现

针对树形结构深度动态变化、无法用固定层数foreach遍历的场景,直接使用以下递归逻辑即可,输出结构和原有硬编码逻辑完全一致。

可直接运行的实现代码

$tot_terms = [];

// 递归遍历函数
$traverse = function ($nodeList) use (&$tot_terms, &$traverse) {
    foreach ($nodeList as $node) {
        // 按depth分组收集当前节点tid
        $tot_terms[$node->depth][] = $node->tid;
        // 存在子节点则递归进入下一层处理
        if (!empty($node->children)) {
            $traverse($node->children);
        }
    }
};

// 传入根层级树结构启动遍历
$traverse($tree);

逻辑说明

  • 采用引用传递&$tot_terms和递归函数自身引用,保证所有层级遍历的结果都能写入同一个结果数组,不存在作用域导致的数据丢失问题
  • 无需预先判断树的最大深度,遍历到任意节点时自动处理其下所有子节点,完全替代原有写死6层的嵌套foreach逻辑
  • 兼容输入为对象元素数组的格式,最终输出结构和给出的期望分组数组完全匹配

常见实现失败排查点

  • 递归传递结果数组时未加引用标记,导致子层级的收集结果无法同步到外层
  • 初始传入遍历的参数错误,误将第一层节点的子节点作为根入参,漏掉第一层节点数据
  • 未判断children字段非空就执行递归,传入非数组值引发遍历报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:27:28