之前写过同样功能的,使用的递归,代码丑陋不堪,偶然发现写的非常好的实现,摘抄如下:

直接上代码

/**

* 把返回的数据集转换成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 数组转树形结构相关推荐

  1. 【通俗易懂】vue-elementul实现树形数据表格,后台返回的扁平化数组进行树形结构转换处理

    效果图 需求是做一个这种的多层级表格,树形数据表格. 大家可能遇到的问题 一种是不知道如何做这种多层级的表格 一种是后台给自己返回的数据不是树形的,也就是没有子父级.全是一条条的扁平化数组.类似这样 ...

  2. JavaScript将数组转为树形结构

    JavaScript将数组转为树形结构 1.需求 后台给了一个这样的数据让咱前端去转换为树形结构(没有重复数据).不多说,先来看看给了一个怎样的数组数据,转换为怎样的树形结构. 服务器传过来的数组 c ...

  3. js 数组 转为树形结构

    题目: source = [{id: 1,pid: 0,name: 'body'}, {id: 2,pid: 1,name: 'title'}, {id: 3,pid: 2,name: 'div'}] ...

  4. php 二维数组转,PHP二维数组转树形,树形转二维数组

    二维数组转为树形if (!function_exists('tree')) { /** * 二维数组 转为 树形结构 * @author super * @time 2020-12-22 10:25: ...

  5. 树形结构的数据与一维数组数据的相互转换

    在我们做项目时,我们有时需要树形结构的数据进行数据的树形层级展示,或者需要把返回的数据结构数据进行拆解成单层数组形式.下面我们就来总结下这两种方法. 数组转树形结构: var data = [{&qu ...

  6. 使用注解+反射实现List与树形结构的相互转换

    应用场景: 提示:此种写法只适用于数据量小的转换,数据量大时请移步另一个方案 [一次循环实现List转树形结构(不使用递归)](https://blog.csdn.net/weixin_3730496 ...

  7. python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据

    先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...

  8. 数据库树形结构,EasyUI Tree 树

    通过 $.fn.tree.defaults 重写默认的 defaults. 树(tree)在网页中以树形结构显示分层数据.它向用户提供展开.折叠.拖拽.编辑和异步加载功能. 树的数据格式(Tree D ...

  9. JS二维数组转树形数据

    JS二维数组转树形数据 // 测试数据const arr = [{ id: '1', pid: '0', name: 'jack', age: 20 },{ id: '2', pid: '0', na ...

最新文章

  1. 简练软考知识点整理-范围确认易混概念
  2. 云原生平台的建设怎么搞?监控系统又该如何演进?这里有答案!
  3. python如何启动前端_python- 前端进阶
  4. css制作圆角矩形,CSS绘制圆角矩形图形的效果
  5. MySQL查询不到中文的问题
  6. MongoDB实战(11)Sharding 分片(上)
  7. Java面试题日积月累(jsp/Servlet面试题20道)
  8. Python知识点之Python进阶
  9. python儿童编程入门-如何让孩子轻松学习Python编程
  10. 代理服务器为何受欢迎?
  11. Jquery 中a||的含义
  12. win7系统 邮箱服务器搭建,win7搭建邮箱服务器
  13. ContraD论文部分翻译与解读(Training GANs with Stronger Augmentations via Contrastive Discriminator)
  14. 唇语识别!AI 领域的下一个万亿市场?
  15. 王晋康 - 替天行道 ▪ 王晋康科幻小说精选集2(2014年3月27日)
  16. 做微信h5支付的统一下单接口开发,虽然已经生成了mweb_url支付链接,但是访问时出现错误提示:‘商家参数格式有误,请联系商家解决’,但是检查h5支付提交的参数,都没有错误。 微信h5支付开发错误
  17. 星际战甲堕落轰击者结合目标_星际战甲牺牲任务流程
  18. android mm是什么版本,Android中m、mm、mmm、mma、mmma的区别
  19. pycharm运行后不显示run的结果
  20. 数据结构: 中序非递归遍历二叉树

热门文章

  1. java第二章选择题_Java第二章习题讲解(2)
  2. python tk 当输入数值错误是报错_Python的异常处理
  3. c语言javapython哪个好-C#、C++、Java、Python 选择哪个好?
  4. Java如何实现二维码?【附源码】
  5. 为什么你投出去的简历,都石沉大海了?
  6. 信息系统项目管理知识--知识产权与标准化
  7. Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
  8. LeetCode 70爬楼梯71简化路径72编辑距离(dp)
  9. ffmpeg之常用命令的学习
  10. 安装和配置sendmail