php用递归实现无限极分类获取树形结构

 表中的数据如下:

递归的方法: 

/**
 * 用递归获取子类信息
 * $data 所有分类
 * $parent_id 父级id
 * $level 层级
 * $result 分好类的数组
*/
function getChild($data,$parent_id = 0,$level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static  $result;
    foreach ($data as $key => $info){
        //第一次遍历,找到父节点为根节点的节点 也就是parent_id=0的节点
        if($info['parent_id'] == $parent_id){
            $info['level'] = $level;
            $result[] = $info;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($data[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            getChild($data,$info['id'],$level+1);
        }
    }
    return $result;
}

得到的结果:

array:4 [▼
  0 => {#220 ▼
    +"id": 1
    +"cate_name": "服装"
    +"parent_id": "0"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 0
  }
  1 => {#223 ▼
    +"id": 3
    +"cate_name": "女装"
    +"parent_id": "1"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 1
  }
  2 => {#224 ▼
    +"id": 4
    +"cate_name": "连衣裙"
    +"parent_id": "3"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 2
  }
  3 => {#222 ▼
    +"id": 2
    +"cate_name": "电子"
    +"parent_id": "0"
    +"sort": 10
    +"create_time": "0000-00-00 00:00:00"
    +"update_time": "0000-00-00 00:00:00"
    +"level": 0
  }
]

用这个结果直接循环就可以得到自己想要的数据了

猜你喜欢

转载自blog.csdn.net/robin_sky/article/details/81909044