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,测量函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...
随机推荐
- C# dynamic json
对应普通对象,写个扩展方法,ToJson蛮方便. 但是 dynamic 类型就不行了,因为是运行时解析,只能转换为强类型 IDictionary<string, object> 才可以. ...
- 开启停止wifi热点bat脚本
@echo offcolor 2title 启停无线WIFI echo 启动WIFI=======>按1键 echo ...
- 分布式事务-Sharding 数据库分库分表
Sharding (转)大型互联网站解决海量数据的常见策略 - - ITeye技术网站 阿里巴巴Cobar架构设计与实践 - 机械机电 - 道客巴巴 阿里分布式数据库服务原理与实践:沈询_文档下载 ...
- java 并发(五)---AbstractQueuedSynchronizer
文章部分图片和代码来自参考文章. LockSupport 和 CLH 和 ConditionObject 阅读源码首先看一下注解 ,知道了大概的意思后,再进行分析.注释一开始就进行了概括.AQS的实现 ...
- redis(9)集群搭建
一.搭建流程 以下我们将构建这样一个redis集群:三个主节点,分别备有一个从节点,主节点之间相互通信,如果主节点挂掉,从节点将被提升为主节点. redis集群至少需要3个redis实例 那么我们需要 ...
- 四、jdbctemplate使用
这里使用mysql数据库,省略数据库创建过程 1.添加依赖 <!--jdbc--> <dependency> <groupId>org.springframewor ...
- JavaScript事件流--事件冒泡、目标与事件捕获
1.事件冒泡 微软提出了名为事件冒泡的事件流.事件冒泡可以形象地比喻为把一颗石头投入水中,泡泡会一直从水底冒出水面.也就是说,事件会从最内层的元素开始发生,一直向上传播,直到document对象. 因 ...
- 在grid结果集中实现全选或全不选某些特定的行
在script的中的代码如下: function check(){ var id = gridgetselectvalue("require_id"); if(id.length& ...
- BZOJ2882: 工艺(后缀数组)
题意 题目链接 Sol 直接把序列复制一遍 后缀数组即可 在前\(N\)个位置中取\(rak\)最小的输出 #include<bits/stdc++.h> using namespace ...
- 移动端h5开发相关内容总结css篇--笔记
原文参考http://mp.weixin.qq.com/s/Nho2DHj-Y59j2F62vpN9jQ 1.开发移动端,头部必要的配置<meta name="viewport&quo ...