首页 > 计算机技术 > 后端开发 > PHP

PHP使用引用方式生成无限分级的树状结构二维数组

原创 lihf8515于2025年02月10日 15:34发表
来源:本站 阅读:79

应用系统开发过程中,具有父子关系的分类结构是很常见的。我们需要将从数据库中查询的二维数组转换为树状结构的二维数组,然后以json字符串的形式传递给前端。


主要的思路有两种:

1、使用递归算法遍历二维数组,生成树状结构二维数组。

2、使用引用方式遍历二维数组,生成树状结构二维数组。


由于引用方式的性能优于递归算法,所以我们选择使用引用方式遍历。为此,在后端具体函数如下:


/**
* 通过引用方式,生成树状结构数组,供多级菜单使用
* @param $array
* @return @array
*/
function getTree($array, $idFieldName='id', $pidFieldName='pid'){
//第一步 构造数据
$items = array();
foreach($array as $value){
$items[$value[$idFieldName]] = $value;
}
//第二步 遍历数据 生成树状结构
$tree = array();
foreach($items as $key => $value){
if(isset($items[$value[$pidFieldName]])){
$items[$value[$pidFieldName]]['children'][] = &$items[$key];
}else{
$tree[] = &$items[$key];
}
}
return $tree;
}



下面这个是数据库中的表的结构和数据示例


-- 数据库表结构
CREATE TABLE `kinds` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '节点ID',
`pid` int(11) NOT NULL COMMENT '父节点ID',
`title` varchar(50) NOT NULL COMMENT '节点名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分类表';

-- 示例数据
INSERT INTO `kinds` (`id`, `pid`, `title`) VALUES
(1, 0, '系统设置'),
(2, 1, '功能菜单'),
(3, 2, '新增'),
(4, 2, '修改'),
(5, 2, '删除');




友情链接: 小财迷收银系统  
Copyright © 2025 HF备忘录. All Rights Reserved.
中华人民共和国工业和信息化部ICP备案序号:皖ICP备2025073039号