PHP实现无限极分类的两种方式,递归和引用
递归(国民级算法)
从数据库取得二维数组省略,递归的思路其实很简单,遍历数组,根据每条数据的id值去寻找所有pid值等于自己id值的数据,直到找不到为止,实际实现起来也是通俗易懂
function getTree($arr,$pid=0,$level=0)
{
static $list = [];
foreach ($arr as $key => $value) {
if ($value["auth_pid"] == $pid) {
$value["level"] = $level;
$list[] = $value;
unset($arr[$key]); //删除已经排好的数据为了减少遍历的次数,当然递归本身就很费神就是了
getTree($arr,$value["id"],$level+1);
}
}
return $list;
}
基本也没啥好说的,这里返回去的是一个已经排序好的一维数组,展示的时候直接遍历就好,加入level字段是为了展示的时候,如果需要缩进,可以有个依据
引用算法
上面的递归原理通俗易懂,但是总所周知的原因,递归对资源的消耗是非常大的,实际执行起来效率也很低,所以有了下面的通过引用算法
function generateTree($data){
$items = array();
foreach($data as $v){
$items[$v['auth_id']] = $v;
}
$tree = array();
foreach($items as $k => $item){
if(isset($items[$item['auth_pid']])){
$items[$item['auth_pid']]['son'][] = &$items[$k];
}else{
$tree[] = &$items[$k];
}
}
return $tree;
本文介绍使用PHP实现无限极分类的两种方法:递归算法和引用算法。递归算法直观但资源消耗大,引用算法则更高效。文章详细展示了两种算法的具体实现过程。
166

被折叠的 条评论
为什么被折叠?



