php list 转tree,PHP 数组转树形结构
之前写过同样功能的,使用的递归,代码丑陋不堪,偶然发现写的非常好的实现,摘抄如下:
直接上代码
/**
* 把返回的数据集转换成Tree
* @param array $list 要转换的数据集
* @param string $pid parent标记字段
* @param string $level level标记字段
* @return array
*/
function List2Tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
if (!is_array($list)) {
return [];
}
// 创建基于主键的数组引用
$aRefer = [];
foreach ($list as $key => $data) {
$aRefer[$data[$pk]] = & $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root === $parentId) {
$tree[] = & $list[$key];
} else {
if (isset($aRefer[$parentId])) {
$parent = & $aRefer[$parentId];
$parent[$child][] = & $list[$key];
}
}
}
return $tree;
}
/**
* 把返回的数据集转换成Tree
* @param array $rows 要转换的数据集
* @param string $id 主键id
* @param string $pid parent标记字段
* @param string $child 子节点存放的位置
* @return array
*/
function List2Tree2($rows, $id='id', $pid='pid', $child = 'child') {
$items = array();
foreach ($rows as $row) {
$items[$row[$id]] = $row;
}
foreach ($items as $item) {
$items[$item[$pid]][$child][$item[$id]] = &$items[$item[$id]];
}
return isset($items[0][$child]) ? $items[0][$child] : [];
}
上测试代码
$aData = [
[
"id" => 1,
"pid" => 0,
"name" => "全部分类",
],
[
"id" => 2,
"pid" => 1,
"name" => "电商",
],
[
"id" => 3,
"pid" => 1,
"name" => "社区",
],
[
"id" => 4,
"pid" => 2,
"name" => "订单",
],
[
"id" => 5,
"pid" => 2,
"name" => "产品",
],
[
"id" => 6,
"pid" => 4,
"name" => "下单",
],
];
$aRoot = List2Tree($aData, 'id', 'pid', 'child', 0);
echo json_encode($aRoot) . "\n";
echo "##################\n";
$aRoot = List2Tree2($aData);
echo json_encode($aRoot) . "\n";
php list 转tree,PHP 数组转树形结构相关推荐
- 【通俗易懂】vue-elementul实现树形数据表格,后台返回的扁平化数组进行树形结构转换处理
效果图 需求是做一个这种的多层级表格,树形数据表格. 大家可能遇到的问题 一种是不知道如何做这种多层级的表格 一种是后台给自己返回的数据不是树形的,也就是没有子父级.全是一条条的扁平化数组.类似这样 ...
- JavaScript将数组转为树形结构
JavaScript将数组转为树形结构 1.需求 后台给了一个这样的数据让咱前端去转换为树形结构(没有重复数据).不多说,先来看看给了一个怎样的数组数据,转换为怎样的树形结构. 服务器传过来的数组 c ...
- js 数组 转为树形结构
题目: source = [{id: 1,pid: 0,name: 'body'}, {id: 2,pid: 1,name: 'title'}, {id: 3,pid: 2,name: 'div'}] ...
- php 二维数组转,PHP二维数组转树形,树形转二维数组
二维数组转为树形if (!function_exists('tree')) { /** * 二维数组 转为 树形结构 * @author super * @time 2020-12-22 10:25: ...
- 树形结构的数据与一维数组数据的相互转换
在我们做项目时,我们有时需要树形结构的数据进行数据的树形层级展示,或者需要把返回的数据结构数据进行拆解成单层数组形式.下面我们就来总结下这两种方法. 数组转树形结构: var data = [{&qu ...
- 使用注解+反射实现List与树形结构的相互转换
应用场景: 提示:此种写法只适用于数据量小的转换,数据量大时请移步另一个方案 [一次循环实现List转树形结构(不使用递归)](https://blog.csdn.net/weixin_3730496 ...
- python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据
先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...
- 数据库树形结构,EasyUI Tree 树
通过 $.fn.tree.defaults 重写默认的 defaults. 树(tree)在网页中以树形结构显示分层数据.它向用户提供展开.折叠.拖拽.编辑和异步加载功能. 树的数据格式(Tree D ...
- JS二维数组转树形数据
JS二维数组转树形数据 // 测试数据const arr = [{ id: '1', pid: '0', name: 'jack', age: 20 },{ id: '2', pid: '0', na ...
最新文章
- 简练软考知识点整理-范围确认易混概念
- 云原生平台的建设怎么搞?监控系统又该如何演进?这里有答案!
- python如何启动前端_python- 前端进阶
- css制作圆角矩形,CSS绘制圆角矩形图形的效果
- MySQL查询不到中文的问题
- MongoDB实战(11)Sharding 分片(上)
- Java面试题日积月累(jsp/Servlet面试题20道)
- Python知识点之Python进阶
- python儿童编程入门-如何让孩子轻松学习Python编程
- 代理服务器为何受欢迎?
- Jquery 中a||的含义
- win7系统 邮箱服务器搭建,win7搭建邮箱服务器
- ContraD论文部分翻译与解读(Training GANs with Stronger Augmentations via Contrastive Discriminator)
- 唇语识别!AI 领域的下一个万亿市场?
- 王晋康 - 替天行道 ▪ 王晋康科幻小说精选集2(2014年3月27日)
- 做微信h5支付的统一下单接口开发,虽然已经生成了mweb_url支付链接,但是访问时出现错误提示:‘商家参数格式有误,请联系商家解决’,但是检查h5支付提交的参数,都没有错误。 微信h5支付开发错误
- 星际战甲堕落轰击者结合目标_星际战甲牺牲任务流程
- android mm是什么版本,Android中m、mm、mmm、mma、mmma的区别
- pycharm运行后不显示run的结果
- 数据结构: 中序非递归遍历二叉树
热门文章
- java第二章选择题_Java第二章习题讲解(2)
- python tk 当输入数值错误是报错_Python的异常处理
- c语言javapython哪个好-C#、C++、Java、Python 选择哪个好?
- Java如何实现二维码?【附源码】
- 为什么你投出去的简历,都石沉大海了?
- 信息系统项目管理知识--知识产权与标准化
- Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
- LeetCode 70爬楼梯71简化路径72编辑距离(dp)
- ffmpeg之常用命令的学习
- 安装和配置sendmail