php中构建树状图
/**
* 指定根层级的树状图
* @param array $list 初始数组
* @param int $root 最上级一条数据的id
* @param string $pk 每一条数据的id
* @param string $pid 上下级关系的pid
* @param string $child 自定义下级关系的字段
* @return array $tree 树状图数组
*/ function generateTree($list, $root = 0, $pk = 'id', $pid = 'pid', $child = '_child')
{
$tree = array();
$packData = array();
foreach ($list as $data) {
$packData[$data[$pk]] = $data;
}
foreach ($packData as $key => $val) {
if ($val[$pid] == $root) {
//代表跟节点, 重点一
$tree[] = &$packData[$key];
} else {
//找到其父类,重点二
$packData[$val[$pid]][$child][] = &$packData[$key];
}
}
return $tree;
}
获取无限极的层级,
public static function getTree($data, $pid, $level = 0)
{
$list = array();
foreach ($data as $k => $v) {
if ($v['parent_id'] == $pid) {
$v['level'] = $level;
$v['name'] ='| — —' . str_repeat('| — —', $level) . $v['name'];// 这里可以加个层级次数 //一个层级增加一维数组
// $v['children'] = self::getTree($data, $v['id'], $level + 1); $list[] = $v;
//构建二级数组
$list = array_merge(self::getTree($data, $v['id'], $level + 1), $list);
} } return $list; }
php中构建树状图的更多相关文章
- vue 树状图数据的循环 递归循环
在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环
- D3树状图异步按需加载数据
D3.js这个绘图工具,功能强大不必多说,完全一个Data Driven Document的绘图工具,用户可以按照自己的数据以及希望实现的图形,随心所欲的绘图. 图形绘制,D3默认采用的是异步加载,但 ...
- SqlServer-无限递归树状图结构设计和查询
在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...
- Android开源图表之树状图和饼状图的官方示例的整理
最近由于工作需要,所以就在github上搜了下关于chart的三方框架 官方地址https://github.com/PhilJay/MPAndroidChart 由于工作需要我这里整理了一份Ecli ...
- D3树状图给指定特性的边特别显示颜色
D3作为前端图形显示的利器,功能之强,对底层技术细节要求相对比较多. 有一点,就是要理解其基本的数据和节点的匹配规则架构,即enter,update和exit原理,我前面的D3基础篇中有介绍过,不明白 ...
- bzoj 4871: [Shoi2017]摧毁“树状图” [树形DP]
4871: [Shoi2017]摧毁"树状图" 题意:一颗无向树,选两条边不重复的路径,删去选择的点和路径剩下一些cc,求最多cc数. update 5.1 : 刚刚发现bzoj上 ...
- visio画等分树状图
一 树状图形状 Search里搜索Tree,找到Double Tree或者Multi Tree的形状 二 分出更多branch 按住主干上的黄色小方块,拖出更多分支. 三 等分分支 将每个分支和对应的 ...
- ArcGIS教程:树状图
摘要 构造可显示特征文件里连续合并类之间的属性距离的树示意图(树状图). 使用方法 · 输入特征文件必须採用预定的特征文件格式. 特征文件可使用 Iso 聚类或创建特征工具来创建.该文件必须至少包括两 ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁“树状图” Time Limit: 25 Sec Memory Limit: 512 MBSubmit: 53 Solved: 9[Submit][Status ...
随机推荐
- 关于apt-get remove 与 apt-get purge
今天在Ubuntu服务器上安装supervisor,部署没成功想卸载重来,sudo apt-get remove supervisor 后发现配置文件还在,便手动删除了配置文件.再次安装,提示配置文件 ...
- Node.js文档-模块
核心模块 Node为Javascript提供了很多服务器级别的API,绝大多数都被包装到了一个具名的核心模块中,例如文件操作的fs核心模块,http服务构建的http模块等,核心模块的使用必须通过re ...
- 有关配置网站时安装ZipArache的方法。
在配置网站初始化过程中,发现ZipArache需要启动,上网搜索了一番,发现安装ZipArache的步骤十分繁琐. 换一种思路,ZipArache作为PHP的拓展类,其名字首部有ZIP字样,那么可否直 ...
- 第1章.Collections类、泛型类和Timing类概述
1.1 群集(collection)的定义 群集是一种结构化的数据类型.它存储数据,并且提供数据的添加.删除.更新操作,以及对群集的不同属性值的设置与返回操作. 群集可以分为两类:线性的和非线性的. ...
- javascript 基础整理
js编码标准 参考 数据类型 注意事项
- C#最基本的Socket编程
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息,是一个简单示例,也是一个最基本的socket编程流程. 简单步骤说明: 1.用指定的port, ip 建 ...
- 为什么你应该使用 Object.is() 进行相等性比较(译)
Title: Why you should use Object.is() in equality comparison Author: TarekAlQaddy Website: https://w ...
- ImportError: libzmq.so.5 报错
https://pkgs.org/download/libzmq.so.5()(64bit) # rpm -ivh zeromq-4.1.4-6.el7.x86_64.rpm
- python 队列、栈
队列 常规队列 双端队列 优先级队列 栈
- 【3】Python中的广播
Python-numpy中有一种很高效的方法:广播. 下面介绍一下广播. 实例:对于这个矩阵,如果想求每列元素的和,怎么才能不用for循环? (1,4)指的是一行四列的矩阵:axis决定了是横向(行 ...