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
相关产品推荐
相关产品推荐

