php无极限分类函数
/**
* [make_tree description]
* @Author Lerko
* @DateTime 2017-04-01T14:57:24+0800
* @param [type] $list [所有的数据]
* @param [type] &$data [返回的数据的载体,传空数组]
* @param string $pk [默认主键]
* @param string $pid [关联到主键的key]
* @param string $child_key [孩子节点的数据key]
* @param string $sort_id [排序id]
* @return [type] [description]
*/
function pidToGetTree($list,&$data,$pk='id',$pid='pid',$child_key="_child",$sort_id='sort_id',$sort_type=SORT_ASC){
if($data===null){
return;
}
if(count($data)==0){
//初始化根列表
foreach ($list as $key => &$value) {
if($value[$pid]==0){
$data[]=$value;
unset($list[$key]);
}
}
}
foreach ($data as $key => &$value) {
foreach ($list as $key2 => $value2) {
if($value2[$pid]==$value[$pk]){
$value[$child_key][]=$value2;
unset($list[$key2]);
}
}
if($value[$child_key]){continue;}
$sort_arr=array_column($value[$child_key],$sort_id);
array_multisort($sort_arr,$sort_type,$value[$child_key]);
pidToGetTree($list,$value[$child_key]);
}
}
输入数据
+----+-----+---------+---------+---------+-------------+---------+
| id | pid | root_id | user_id | sort_id | name_cn | name_en |
+----+-----+---------+---------+---------+-------------+---------+
| 1 | 0 | 2160 | 2160 | 0 | 种类1 | cat |
| 2 | 1 | 2160 | 2160 | 1 | 种类1-1 | cat |
| 3 | 1 | 2160 | 2160 | 1 | 种类1-2 | cat |
| 4 | 1 | 2160 | 2160 | 1 | 种类1-3 | cat |
| 5 | 0 | 2160 | 2160 | 0 | 种类5 | cat |
| 6 | 2 | 2160 | 2160 | 2 | 种类1-1-1 | cat |
| 7 | 5 | 2160 | 2160 | 5 | 种类5-1 | cat |
| 8 | 5 | 2160 | 2160 | 3 | 种类5-2 | cat |
| 9 | 0 | 2160 | 2160 | 0 | 种类9 | cat |
| 10 | 9 | 2160 | 2160 | 9 | 种类9-1 | cat |
| 11 | 9 | 2160 | 2160 | 9 | 种类9-2 | cat |
+----+-----+---------+---------+---------+-------------+---------+
输出数据
array (size=3)
0 =>
array (size=8)
'id' => string '1' (length=1)
'pid' => string '0' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '0' (length=1)
'name_cn' => string '种类1' (length=7)
'name_en' => string 'cat' (length=3)
'_child' =>
array (size=3)
0 =>
array (size=7)
'id' => string '2' (length=1)
'pid' => string '1' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '1' (length=1)
'name_cn' => string '种类1-1' (length=9)
'name_en' => string 'cat' (length=3)
1 =>
array (size=7)
'id' => string '3' (length=1)
'pid' => string '1' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '1' (length=1)
'name_cn' => string '种类1-2' (length=9)
'name_en' => string 'cat' (length=3)
2 =>
array (size=7)
'id' => string '4' (length=1)
'pid' => string '1' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '1' (length=1)
'name_cn' => string '种类1-3' (length=9)
'name_en' => string 'cat' (length=3)
1 =>
array (size=8)
'id' => string '5' (length=1)
'pid' => string '0' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '0' (length=1)
'name_cn' => string '种类5' (length=7)
'name_en' => string 'cat' (length=3)
'_child' =>
array (size=2)
0 =>
array (size=7)
'id' => string '7' (length=1)
'pid' => string '5' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '5' (length=1)
'name_cn' => string '种类5-1' (length=9)
'name_en' => string 'cat' (length=3)
1 =>
array (size=7)
'id' => string '8' (length=1)
'pid' => string '5' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '3' (length=1)
'name_cn' => string '种类5-2' (length=9)
'name_en' => string 'cat' (length=3)
2 =>
array (size=8)
'id' => string '9' (length=1)
'pid' => string '0' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '0' (length=1)
'name_cn' => string '种类9' (length=7)
'name_en' => string 'cat' (length=3)
'_child' =>
array (size=2)
0 =>
array (size=7)
'id' => string '10' (length=2)
'pid' => string '9' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '9' (length=1)
'name_cn' => string '种类9-1' (length=9)
'name_en' => string 'cat' (length=3)
1 =>
array (size=7)
'id' => string '11' (length=2)
'pid' => string '9' (length=1)
'root_id' => string '2160' (length=4)
'user_id' => string '2160' (length=4)
'sort_id' => string '9' (length=1)
'name_cn' => string '种类9-2' (length=9)
'name_en' => string 'cat' (length=3)
php无极限分类函数的更多相关文章
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数017·point点函数
<zw版·Halcon-delphi系列原创教程> Halcon分类函数017·point点函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数015,vector矢量
<zw版·Halcon-delphi系列原创教程> Halcon分类函数015,vector矢量 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数016,xld,xld轮廓
<zw版·Halcon-delphi系列原创教程> Halcon分类函数016,xld,xld轮廓 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数014,tuple,元组
<zw版·Halcon-delphi系列原创教程> Halcon分类函数014,tuple,元组 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数013,shape模型
<zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“pr ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形
<zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别
<zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数010,obj,对象管理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数010,obj,对象管理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数009,Measure,测量函数
<zw版·Halcon-delphi系列原创教程> Halcon分类函数009,Measure,测量函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...
随机推荐
- 如何学习OpenStack
转自:http://www.chenshake.com/learn-how-openstack/ 如何学习OpenStack 由于工作的关系,也招收实习生,希望可以通过实习生的培养,让他们对Opens ...
- jquery 使用整理机制
短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了.在 jQuery 中,大量的使用了短路表达式与多重短路表达式. 短路表达式:作为"&&"和" ...
- ios audio不能自动播放
今天做了一个简单的落地页项目,就是类似于手机微信上经常看到的滑动效果.因为公司要求需要自己开发,所以我就用swiper+swiper.animate开发,开发速度很快,只不过最后音乐哪里出现了一点小b ...
- Java - 谨慎覆盖equals
平时很难遇到需要覆盖equals的情况. 什么时候不需要覆盖equals? 类的每个实例本质上是唯一的,我们不需要用特殊的逻辑值来表述,Object提供的equals方法正好是正确的. 超类已经覆盖了 ...
- Hibernate学习1--对象持久化的思想
前些天开始接触hibernate,想想以前直接用c3p0进行笨拙而繁杂的数据库操作就觉得生无可恋了,也正因如此,在刚刚接触hibernate的我,便强烈地喜欢上这种偷懒而优雅的面向对象式操作数据库的方 ...
- 四 Scatter/Gather
scatter/gather用于描述从Channel中读取或者写入到Channel的操作. 分散(scatter):从Channel中读取在读操作中将读取的数据写入多个Buffer中.因此,Chann ...
- CAP理论-解析
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ...
- thinkphp下判断状态值语法
在thinkphp框架下我们经常会用到状态值的判断:但是这样写会引起语法错误. <div> <if condition="{$res.status} eq '0'" ...
- 2D平面中关于矩阵(Matrix)跟图形变换的讲解
在二维平面上,常用的有以下三种基本的图形变化: 1)Translation 2)Scale 3)Rotation 在canvas的开发中,我们也经常会用到这样的一些图形变换,尤其是我们在写自定义Vie ...
- 解决 spring cloud 项目的 com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect 错误信息
在项目中引入:引入hystrix依赖,如下 <dependency> <groupId>org.springframework.cloud</groupId> &l ...