递归函数通过自我调用处理树形结构,需有终止条件和问题缩小机制;示例中将扁平数组按parent_id构建为嵌套树,反之亦可展平为带层级的列表,适用于菜单、分类等无限级数据操作。

在PHP开发中,经常需要处理树形结构数据,比如分类、菜单、评论嵌套等。这类数据通常具有父子关系,且层级不确定,这时就需要使用递归函数来遍历和转换原始数据为所需的格式。
递归函数是指函数在其内部调用自身,直到满足某个终止条件为止。在处理树形或嵌套结构时,递归可以逐层深入,把每一级子节点都正确组织起来。
关键点:
假设数据库返回的是一个扁平数组,每个元素包含id、parent_id和name字段,我们要将其转换成嵌套的树状结构。
立即学习“PHP免费学习笔记(深入)”;
function buildTree($data, $parentId = 0) {
$tree = [];
foreach ($data as $item) {
if ((int)$item['parent_id'] === (int)$parentId) {
$children = buildTree($data, $item['id']);
if (!empty($children)) {
$item['children'] = $children;
}
$tree[] = $item;
}
}
return $tree;
}
// 示例数据
$flatData = [
['id' => 1, 'parent_id' => 0, 'name' => '首页'],
['id' => 2, 'parent_id' => 0, 'name' => '产品'],
['id' => 3, 'parent_id' => 2, 'name' => '手机'],
['id' => 4, 'parent_id' => 2, 'name' => '电脑'],
['id' => 5, 'parent_id' => 3, 'name' => 'iPhone'],
];
$treeData = buildTree($flatData);
print_r($treeData);
输出结果会形成层级清晰的嵌套数组,方便前端渲染成多级菜单或选择器。
有时候也需要把树形结构还原成扁平列表,例如导出数据或构建面包屑导航。
function flattenTree($tree, $level = 0, &$result = [], $prefix = '') {
foreach ($tree as $item) {
$item['level'] = $level;
$item['name_display'] = str_repeat(' ', $level) . $item['name'];
$result[] = $item;
if (!empty($item['children'])) {
flattenTree($item['children'], $level + 1, $result, $prefix);
}
}
return $result;
}
这个函数可以在后台管理系统中用来展示带缩进的分类列表。
基本上就这些。只要掌握递归的核心逻辑——“找子项,再对子项做同样操作”,就能灵活应对各种嵌套数据转换场景。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号