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

PHP多维树形结构数组的层级查找与节点层级更新

给PHP树形数组节点添加层级字段的解决方案

没问题,这个需求用递归处理最直观高效了,我给你写个可以直接复用的PHP函数,完美适配你的树形结构:

function addLevelToTree(&$tree, $currentLevel = 1) {
    // 给当前节点添加层级字段
    $tree['level'] = $currentLevel;
    
    // 如果当前节点有子节点,递归处理每个子节点
    if (!empty($tree['children']) && $tree['has_children']) {
        foreach ($tree['children'] as &$child) {
            addLevelToTree($child, $currentLevel + 1);
        }
        // 释放引用,避免后续数组操作出问题
        unset($child);
    }
}

怎么使用这个函数

假设你的树形数组存在变量$treeData里,直接调用就行:

// 你的原始树形数组
$treeData = [
    'id' => 'test1',
    'data' => ['balance' => 0],
    'has_children' => 1,
    'children' => [
        [
            'id' => 'test2',
            'data' => ['balance' => 45],
            'has_children' => 0
        ],
        [
            'id' => 'test3',
            'data' => ['balance' => 78],
            'has_children' => 0
        ]
    ]
];

// 调用函数添加层级
addLevelToTree($treeData);

// 打印结果看看
print_r($treeData);

输出结果示例

调用后你的数组每个节点都会多一个level字段:

Array
(
    [id] => test1
    [data] => Array
        (
            [balance] => 0
        )

    [has_children] => 1
    [children] => Array
        (
            [0] => Array
                (
                    [id] => test2
                    [data] => Array
                        (
                            [balance] => 45
                        )

                    [has_children] => 0
                    [level] => 2
                )

            [1] => Array
                (
                    [id] => test3
                    [data] => Array
                        (
                            [balance] => 78
                        )

                    [has_children] => 0
                    [level] => 2
                )

        )

    [level] => 1
)

一些补充说明

  • 函数用了引用传递(&$tree),这样直接修改原数组,不用额外返回值,节省内存
  • 如果你的has_children字段值是null或者false,可以把判断条件改成!empty($tree['children']) && !empty($tree['has_children']),适配不同的字段值情况
  • 如果根节点的层级你想从0开始,只需要把函数的默认参数$currentLevel = 1改成$currentLevel = 0就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:27