搜索
系统检测到您的用户名不符合规范:

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

浏览:6634 发布日期:2013年02月03日 分类:基础算法
通过一次查询所有菜单数据后再从结果中整理出等级层次关系的递归函数
这个方法只要是查询的数据含有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;
}
收藏
heheboy
积分:670 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /