如何使用纯递归累积层级数据而不依赖类属性变量-php教程

本文介绍一种不依赖类成员变量的纯递归方式,将嵌套的父子结构数组(如面包屑路径)转换为正序排列的扁平数组,通过引用传递或返回值累积结果,提升代码可测试性与线程安全性。

在处理树形嵌套结构(如带 all_parents 的层级数据)时,常见的陷阱是依赖类属性(如 $this->breadcrumb)作为递归过程中的“累加器”。这不仅破坏了函数的纯度,还导致不可重入、难以单元测试,且在并发或递归调用多个实例时易引发状态污染。

✅ 推荐方案一:引用传参 + 顶层反转(简洁实用)

private function generateBreadcrumb($structure, &$output = []): array
{
    if (!empty($structure)) {
        $output[] = [
            'id'   => $structure['id'],
            'name' => $structure['name'],
        ];
        $this->generateBreadcrumb($structure['all_parents'] ?? null, $output);
    }
    return array_reverse($output);
}

⚠️ 注意:array_reverse() 仅在最外层调用返回前执行一次,而非每次递归都调用,避免性能浪费。&$output 确保所有递归层级共享同一数组引用,最终由顶层统一反转,得到从根(ID=1)到当前节点(ID=5)的正序列表。

✅ 推荐方案二:无副作用纯函数式(推荐进阶用法)

若追求完全无状态、可预测的纯函数,可改用“自底向上”构建——让每次递归返回其子路径,再拼接当前项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何使用纯递归累积层级数据而不依赖类属性变量-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001809+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001809+
  • 本周更新: 0+
  • 最后更新: 2026-03-16