php 递归 无限级分类 tree

 1    $res =Db::name('trees')->select();
 2         $list= $this->getTree($res);
 3 // 目录 树形
 4     function getTree($arr,$pid=0,$level=0)
 5     {
 6         $list =array();
 7         foreach ($arr as $k=>$v){
 8             if ($v['pid'] == $pid){
 9                 $v['level']=$level;
10                 $child=$this->getTree($arr,$v['id'],$level+1);
11                 if(count($child)){
12                     $v['leaf'] = false; //是否子节点
13                     $v['child'] = $child;
14                 }else{
15                     $v['leaf'] = true;
16                 }
17                 $list[] = $v;
18             }
19         }
20         return $list;
21     }
22     
23     // ──a
24     // ───aa
25     // ──b
26     // ───bb
27     private function GetTreeList($arr, $pid=0, $level=0)
28     {
29         global $tree;
30         foreach ($arr as $key => $val) {
31             if ($val['pid'] == $pid) {
32                 $flg = str_repeat('─', $level); //
33                 $val['name'] = $flg . $val['name'];
34                 $tree[] = $val;
35                 $this->GetTreeList($arr, $val['id'], $level + 1);
36 
37             }
38 
39         }
40         return $tree;
41     }
42 -- --------------------------------------------------------
43 
44 DELETE FROM `trees`;
45 INSERT INTO `trees` (`id`, `pid`, `name`) VALUES
46     (1, 0, '中国'),
47     (2, 0, '美国'),
48     (3, 0, '日本'),
49     (4, 1, '北京'),
50     (5, 1, '上海'),
51     (6, 1, '广州'),
52     (7, 2, '华盛顿'),
53     (8, 2, '纽约'),
54     (9, 3, '东京'),
55     (10, 3, '广岛'),
56     (11, 4, '朝阳区'),
57     (12, 4, '海淀区'),
58     (13, 5, '静安'),
59     (14, 5, '新界'),
60     (15, 14, '新界A');

 

posted @ 2019-06-12 22:06  歲夢灬沉浮  阅读(1536)  评论(0)    收藏  举报