无限极分类实现方式
一、递归实现
function getCategory($arr,$pid=0,$level=0)
{
static $cateList = [];
foreach($arr as $k=>$v)
{
if($v['pid'] == $pid)
{
$cateList[] = $v;
unset($arr[$key]);//删除已经排好序的数据,减少遍历次数
$cateList['lavel'] = $level;
}
getCategory($arr,$v['id'],$level+1);
}
return $list;
}
$arr | 要遍历的数据(二维数组) |
---|---|
$pid | 父分类ID |
– | – |
$level | 展示层级 |
递归实现:根据每条数据的id值去寻找所有pid值等于自己id值的数据,直到找不到为止
二、引用实现
function getCategory($data)
{
static $cateList = [];
foreach($data as $v)
{
$cateList[$v['id']] = $v;
}
$list = [];
foreach($cateList as $k1=>$v1)
{
if(isset($v1['pid']))
{
$cateList[$v1['pid']]['son'] = &$cateList[$k1];
}else{
$list[] = $cateList[$k1];
}
}
return $list;
}
最终的数据结构:
Array
(
[0] => Array
(
[auth_id] => 100
[auth_name] => 后台首页
[auth_pid] => 0
[son] => Array
(
[0] => Array
(
[auth_id] => 122
[auth_name] => 数据一览
[auth_pid] => 100
)
[1] => Array
(
[auth_id] => 123
[auth_name] => 更新日志
[auth_pid] => 100
)
)
)
[1] => Array
(
[auth_id] => 116
[auth_name] => 管理员
[auth_pid] => 0
[son] => Array
(
[0] => Array
(
[auth_id] => 120
[auth_name] => 管理员列表
[auth_pid] => 116
)
[1] => Array
(
[auth_id] => 121
[auth_name] => 管理员添加
[auth_pid] => 116
)
)
)
)
引用实现:在运行速度上可以说都是很快的