导读:本期聚焦于小伙伴创作的《php数据整理中如何按父子id生成嵌套数组并实现层级深度控制》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《php数据整理中如何按父子id生成嵌套数组并实现层级深度控制》有用,将其分享出去将是对创作者最好的鼓励。

在php开发中,我们经常从数据库取出形如 id、parent_id 的扁平数据,需要把它们按父子关系整理成嵌套数组,同时希望控制最多递归几层,防止层级太深影响性能或前端展示。

php数据整理中如何按父子id生成嵌套数组并实现层级深度控制

一、准备扁平数据

假设从数据库查出的数据是一个普通数组,每条记录有 id 和 parent_id,parent_id 为 0 表示顶级。

<?php
// 模拟数据库查出的扁平数据
$list = array(
    array('id' => 1, 'parent_id' => 0, 'name' => '服装'),
    array('id' => 2, 'parent_id' => 1, 'name' => '男装'),
    array('id' => 3, 'parent_id' => 1, 'name' => '女装'),
    array('id' => 4, 'parent_id' => 2, 'name' => '衬衫'),
    array('id' => 5, 'parent_id' => 0, 'name' => '数码'),
);
?>

二、递归生成嵌套数组

利用引用把子节点挂到父节点的 children 键上,同时通过深度参数限制递归层数。

<?php
function buildTree($list, $parentId = 0, $depth = 1, $maxDepth = 3) {
    $tree = array();
    if ($depth > $maxDepth) {
        return $tree;
    }
    foreach ($list as &$item) {
        if ($item['parent_id'] == $parentId) {
            $children = buildTree($list, $item['id'], $depth + 1, $maxDepth);
            if (!empty($children)) {
                $item['children'] = $children;
            }
            $tree[] = $item;
        }
    }
    return $tree;
}

$result = buildTree($list, 0, 1, 3);
print_r($result);
?>

代码要点说明

  • 函数 buildTree 接收扁平数组、当前父id、当前深度和最大深度。
  • 使用 & 引用遍历,让挂接 children 时直接修改原数据。
  • 当 depth 超过 maxDepth 时直接返回空,实现层级深度控制。

三、如果不限制深度的写法

若不需要控制层级,可去掉深度参数,递归直到没有子节点:

<?php
function buildTreeNoLimit($list, $parentId = 0) {
    $tree = array();
    foreach ($list as &$item) {
        if ($item['parent_id'] == $parentId) {
            $children = buildTreeNoLimit($list, $item['id']);
            if (!empty($children)) {
                $item['children'] = $children;
            }
            $tree[] = $item;
        }
    }
    return $tree;
}
?>

四、总结

按父子 id 生成嵌套数组的核心是利用递归和引用。加上深度参数就能轻松控制层级,避免无限嵌套。实际项目中建议把最大深度做成可配置项,方便不同业务场景复用同一套 php 数据整理逻辑。

php递归nested_arrayparent_child_id修改时间:2026-07-27 06:03:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。