php 两种递归方法

直接上代码

 1 //1、tp5写法,一步一步入库查询
 2 function get_array($id=0){
 3     $result = Db::name('category')->where(['pid'=>$id])->select();
 4     $arr = array();
 5     if($result){//如果有子类
 6         foreach ($result as $val){
 7             $val['list'] = get_array($val['id']);
 8             $arr[] = $val; //组合数组
 9         }
10     }
11     return $arr;
12 }
13 $str = json_encode(get_array(0));
14 echo $str;
15 
16 //2、先查库,然后再进行递归查询,不用频繁操作数据库了
17 $result = Db::name('category')
18     ->field('id,value,pid')
19     ->select();
20 dump($result);
21 
22 function getTree($data, $pid){
23     $tree = [];
24     foreach($data as $k => $v){
25         if($v['pid'] == $pid){        //父亲找到儿子
26             $v['son'] = getTree($data, $v['id']);//再看看是否还有孙子。。
27             $tree[] = $v;
28             //unset($data[$k]);
29         }
30     }
31     return $tree;
32 }
33 $tree = getTree($result, 0);
34 dump($tree);
35 echo json_encode($tree);

建议使用第二种

原文地址:https://www.cnblogs.com/cyfblogs/p/12957314.html