/**
* [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无极限分类函数的更多相关文章

  1. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数017·point点函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数017·point点函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  2. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数015,vector矢量

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数015,vector矢量 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  3. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数016,xld,xld轮廓

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数016,xld,xld轮廓 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...

  4. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数014,tuple,元组

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数014,tuple,元组 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  5. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数013,shape模型

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“pr ...

  6. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数012,polygon,多边形

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...

  7. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  8. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数010,obj,对象管理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数010,obj,对象管理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  9. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数009,Measure,测量函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数009,Measure,测量函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

随机推荐

  1. XAMl中使用事件

    在XAMl代码中,尽管属性设置通常占据了大量代码量,也可以在XAMl中声明事件,事件的声明通常使用事件名=“事件处理方法名称”,并且在后置代码中,需要对指定的后置代码提供声明和实现 而且方法的签名也需 ...

  2. TCP基础知识(一)简介与数据包

    TCP详解(1):简介与数据包 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 应用层向TCP层发送用于网间传输 ...

  3. dockerfile 踩坑记录

    1.使用ADD/COPY命令 源文件必须和Dockfile位于同一目录下(使用绝对路径是没用的,会提示找不到你的源文件) 2.ADD命令会自动解压 3.尽量耗时且不容易变的部分放在dockerfile ...

  4. 《Head First 设计模式》之工厂模式

    工厂模式(Factory) 依赖倒置原则(Dependency Inversion Principle):依赖抽象,不要依赖具体类. 变量不可以持有具体类的引用.(如果使用new,就会持有具体类的引用 ...

  5. javascript判断一个元素是另外一个元素的子元素

    javascript判断一个元素是另外一个元素的子元素用途有很多,最常用的就是当点击页面的空白处去执行某些操作,比如弹出层等. function isParent (obj,parentObj){ w ...

  6. html dl dt dd 标签语法与使用

    一.dl dt dd认识 html <dl> <dt> <dd>是一组合标 […]

  7. asp.net怎么让某一页的 requestEncoding设置成utf-8

    web.config里是这样的 <globalization requestEncoding="gb2312" responseEncoding="gb2312&q ...

  8. 【Udacity】朴素贝叶斯

    机器学习就像酿制葡萄酒--好的葡萄(数据)+好的酿酒方法(机器学习算法) 监督分类 supervised classification Features -->Labels 保留10%的数据作为 ...

  9. java面试题之----IO与NIO的区别

    JAVA NIO vs IO 当我们学习了Java NIO和IO后,我们很快就会思考一个问题: 什么时候应该使用IO,什么时候我应该使用NIO 在下文中我会尝试用例子阐述java NIO 和IO的区别 ...

  10. Visio中锁定元件

    若要进行形状保护,需要能看到“开发工具”选项卡.默认情况下,该选项卡是隐藏的. 查看“开发工具”选项卡 单击“文件”选项卡. 单击“选项”. 单击“高级”,然后向下滚动到“常规”部分. 选择“以开发人 ...