欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

查询菜单数据后的无限级递归处理函数

程序员文章站 2022-05-24 23:22:05
...
通过一次查询所有菜单数据后再从结果中整理出等级层次关系的递归函数
这个方法只要是查询的数据含有pid字段的都可以用来实现分级整理function arrayPidProcess($data,$res=array(),$pid='0'){//$level='0'){
foreach ($data as $k => $v){
if($v['pid']==$pid){
$res[$v['id']]['info']=$v;
$res[$v['id']]['child']=arrayPidProcess($data,array(),$v['id']);
}
}
return $res;
}
求高手对这个递归的效率进行评估,求建议更好的方法
更新一下,添加了endlevel参数,作用为限制整理级数,默认值是‘0’为全整理,设置该参数可以限制只搜索到表level字段的级数,这样有效减低不必要的系统开支function arrayPidProcess($data,$res=array(),$pid='0',$endlevel='0'){
foreach ($data as $k => $v){
if($v['pid']==$pid){
$res[$v['id']]['info']=$v;
if($endlevel!='0'){
if($v['level']==$endlevel){
$child=null;
}
else{
$child=arrayPidProcess($data,array(),$v['id'],$endlevel);
}
$res[$v['id']]['child']=$child;
}
else{
$child=arrayPidProcess($data,array(),$v['id']);
if($child==''||$child==null){
$res[$v['id']]['child']=null;
}
else{
$res[$v['id']]['child']=$child;
}
}

}
}
return $res;
}
应网友要求提供的使用例子:function getMenu()
{
$menu=M('admin_menu');
$condition['status']='1';
$res_menu=$menu->where($condition)->order('sort asc')->select();
return arrayPidProcess($res_menu,array(),'0','2');
}
//查询数据整理递归函数(无限制级别)
function arrayPidProcess($data,$res=array(),$pid='0',$endlevel='0'){
foreach ($data as $k => $v){
if($v['pid']==$pid){
$res[$v['id']]['info']=$v;
if($endlevel!='0'){
if($v['level']==$endlevel){
$child=null;
}
else{
$child=arrayPidProcess($data,array(),$v['id'],$endlevel);
}
$res[$v['id']]['child']=$child;
}
else{
$child=arrayPidProcess($data,array(),$v['id']);
if($child==''||$child==null){
$res[$v['id']]['child']=null;
}
else{
$res[$v['id']]['child']=$child;
}
}

}
}
return $res;
}

AD:真正免费,域名+虚机+企业邮箱=0元