/**
* [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)

最新文章

  1. Go语言 使用内置Http组件
  2. pimpl idiom vs. bridge design pattern
  3. webstrom快捷键速查
  4. Xcode中使用debug模式和release模式
  5. 实现的一个ajax请求组件 有加载效果
  6. 推荐35个新鲜出炉的响应式 Web 设计实例
  7. Conjugate prior relationships
  8. EJB 总结学习(1)
  9. (转)PHP数组的总结(很全面啊)
  10. Devpexpress 打印预览问题
  11. 1. Apache ZooKeeper快速课程入门
  12. WPF编程宝典(Pro wpf in c# 2012)(文摘)
  13. SSM_CRUD新手练习(3)创建数据库
  14. Android教你怎样一步步打造通用适配器
  15. Croc Champ 2013 - Round 1 E. Copying Data 分块
  16. python 脚本检测python 版本
  17. linux 配置msyql
  18. 在vm上面安装Linux系统
  19. Redis-数据操作
  20. ajax 请求 后台返回的文件流

热门文章

  1. B/S结构中页面间的传值
  2. mybatis mapper调用mysql存储过程
  3. The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter.
  4. Ajax实现页面跳转与结果返回
  5. python--boto3 之 与dynamoDB 的基本交互,表的备份与恢复
  6. OpenStack系列
  7. mockito測試框架
  8. Angularjs ngTable使用备忘
  9. Windows 8 Metro风格颜色表-Metro colours
  10. css3 background-sizing 属性,捎带 background-repeat 属性