表中的数据如下:
递归的方法:
/**
* 用递归获取子类信息
* $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
}
]
用这个结果直接循环就可以得到自己想要的数据了