PHP实现无限级分类(递归方法)
1 $array = [ 2 array('id' => 1, 'parent_id' => 0, 'cate_name' => '一级'), 3 array('id' => 2, 'parent_id' => 0, 'cate_name' => '一级'), 4 array('id' => 3, 'parent_id' => 1, 'cate_name' => '二级'), 5 array('id' => 4, 'parent_id' => 1, 'cate_name' => '二级'), 6 array('id' => 5, 'parent_id' => 2, 'cate_name' => '二级'), 7 array('id' => 6, 'parent_id' => 2, 'cate_name' => '二级'), 8 array('id' => 7, 'parent_id' => 3, 'cate_name' => '三级'), 9 array('id' => 8, 'parent_id' => 3, 'cate_name' => '三级'), 10 array('id' => 9, 'parent_id' => 4, 'cate_name' => '三级'), 11 array('id' => 10, 'parent_id' => 4, 'cate_name' => '三级'), 12 array('id' => 11, 'parent_id' => 5, 'cate_name' => '三级'), 13 array('id' => 12, 'parent_id' => 5, 'cate_name' => '三级'), 14 array('id' => 13, 'parent_id' => 6, 'cate_name' => '三级'), 15 array('id' => 14, 'parent_id' => 6, 'cate_name' => '三级'), 16 ];
下面是方法,采用递归的方式实现:
1 function cate($array, $parent_id) 2 { 3 $list = array(); 4 foreach ($array as $value) { 5 if ($value['parent_id'] == $parent_id) { 6 $value['son'] = self::cate($array, $value['id']); 7 $list[] = $value; 8 } 9 } 10 return $list; 11 }
然后,我们就可以直接调用这个方法,通过改变第二个参数获取父类的所有子类
1 $this->cate($array, 0)
结果如下(json形式)
1 [ 2 { 3 "id": 1, 4 "parent_id": 0, 5 "cate_name": "一级", 6 "son": [ 7 { 8 "id": 3, 9 "parent_id": 1, 10 "cate_name": "二级", 11 "son": [ 12 { 13 "id": 7, 14 "parent_id": 3, 15 "cate_name": "三级", 16 "son": [] 17 }, 18 { 19 "id": 8, 20 "parent_id": 3, 21 "cate_name": "三级", 22 "son": [] 23 } 24 ] 25 }, 26 { 27 "id": 4, 28 "parent_id": 1, 29 "cate_name": "二级", 30 "son": [ 31 { 32 "id": 9, 33 "parent_id": 4, 34 "cate_name": "三级", 35 "son": [] 36 }, 37 { 38 "id": 10, 39 "parent_id": 4, 40 "cate_name": "三级", 41 "son": [] 42 } 43 ] 44 } 45 ] 46 }, 47 { 48 "id": 2, 49 "parent_id": 0, 50 "cate_name": "一级", 51 "son": [ 52 { 53 "id": 5, 54 "parent_id": 2, 55 "cate_name": "二级", 56 "son": [ 57 { 58 "id": 11, 59 "parent_id": 5, 60 "cate_name": "三级", 61 "son": [] 62 }, 63 { 64 "id": 12, 65 "parent_id": 5, 66 "cate_name": "三级", 67 "son": [] 68 } 69 ] 70 }, 71 { 72 "id": 6, 73 "parent_id": 2, 74 "cate_name": "二级", 75 "son": [ 76 { 77 "id": 13, 78 "parent_id": 6, 79 "cate_name": "三级", 80 "son": [] 81 }, 82 { 83 "id": 14, 84 "parent_id": 6, 85 "cate_name": "三级", 86 "son": [] 87 } 88 ] 89 } 90 ] 91 } 92 ]