PHP 实现树形结构数组的构建与转换详解(含完整示例)
一、文章标题
《PHP 树形结构构建与转换实战:实现 arrayToTree、treeToArray 及获取树深度》
二、摘要
在开发中,我们经常会遇到需要将扁平化数据(如数据库查询结果)转换为树状结构的需求,例如菜单管理、分类层级、组织架构等。本文将详细介绍一组 PHP 函数,包括:
arrayToTree
:将一维数组构建成树形结构;treeToArray
:将树形结构还原为一维数组;getTreeDeep
:获取树的最大深度。
通过这些函数的实现和使用,我们可以更加灵活地处理具有父子关系的数据结构。
三、功能概述
主要功能说明:
方法名 | 功能描述 |
---|---|
arrayToTree() |
将一维数组根据父子 ID 构建成树形结构 |
treeToArray() |
将树形结构递归展开为一维数组 |
getTreeDeep() |
获取树结构的最大深度 |
这些方法适用于菜单系统、权限管理、商品分类等多种业务场景,是处理嵌套结构的基础工具。
四、代码结构解析
1. 构建树结构:arrayToTree()
public static function arrayToTree(array $data, int $id, string $parentIdName = 'parent_id', string $idName = 'id', int $level = 1): array
参数说明:
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
$data |
array | - | 扁平数据源 |
$id |
int | - | 当前根节点 ID |
$parentIdName |
string | parent_id | 父级字段名 |
$idName |
string | id | 主键字段名 |
$level |
int | 1 | 当前层级(用于记录层级信息) |
返回值:
返回一个树形结构数组,每个节点包含其子节点数组(children
字段),以及当前层级(level
)、索引(index
)等附加信息。
示例输入:
$data = [
['id' => 1, 'parent_id' => 0, 'name' => '一级分类'],
['id' => 2, 'parent_id' => 1, 'name' => '二级分类A'],
['id' => 3, 'parent_id' => 1, 'name' => '二级分类B'],
['id' => 4, 'parent_id' => 2, 'name' => '三级分类'],
];<