• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 无限极分类

php 搞代码 3年前 (2022-01-23) 11次浏览 已收录 0个评论

无限极分类:递归和迭代实现

1、找指定栏目的子栏目

2、找指定栏目的子孙栏目,既子孙树

3、找指定栏目的父目录、祖父目录、….,、顶级目录

欲处理的原始数据
$area=array(array('id'=>1,'name'=>'山东','parent'=>0),array('id'=>2,'name'=>'菏泽','parent'=>1),array('id'=>3,'name'=>'定陶','parent'=>2),array('id'=>4,'name'=>'青岛','parent'=>1),array('id'=>5,'name'=>'莱西','parent'=>4),array('id'=>6,'name'=>'烟台','parent'=>1),array('id'=>7,'name'=>'南山','parent'=>6),array('id'=>8,'name'=>'仿山','parent'=>3),array('id'=>9,'name'=>'日照','parent'=>1),array('id'=>10,'name'=>'济南','parent'=>1));

//找子栏目function findSon($arr,$id=0){	//查找$arr中元素的parent的值等于$id就是其子目录	$s	foreach ($arr as $v) {	 	if($v['parent']==$id){	 		$sons[]=$v;	 		}	} 	return $sons;}
//找子孙树
//利用静态变量function findTree($arr,$id,$lev=1){	static $subs=array();		foreach ($arr as $v) {	 	if($v['parent']==$id){	 		$v['lev']=$lev;	 		$subs[]=$v;	 	    findTree($arr,$v['id'],$lev+1);	 		}	} 	return $subs;		}方法二、function findTree($arr,$id,$lev=1){	 static $subs=array();		foreach ($arr as $v) {	 	if($v['parent']==$id){	 		$v['lev']=$lev;	 		$subs[]=$v;	 	    $subs=$subs+findTree($arr,$v['id'],$lev+1);	 		}	} 	return $subs;		}方法三、function findTree($arr,$id,$lev=1){	  $subs=array();		foreach ($arr as $v) {	 	if($v['parent']==$id){	 		$v['lev']=$lev;	 		$subs[]=$v;	 	    $subs= array_merge( $subs,findTree($arr,$v['id'],$lev+1));	 		}	} 	return $subs;		}
//用迭代法来找子孙树function subTree($arr,$parent=0){	$task=array($parent);//任务表	$tree=array();//地区表	while(!empty($task)){				$flag=false;		foreach($arr as $k=>$v){						if($v['parent']==$parent){				$tree[]=$v;				array_push($task,$v['id']);//最新的地区id入任务栈				$parent=$v['id'];				unset($arr[$k]);//把找到单元unset								$flag=true;				}							}			if($flag==false){										array_pop($task);					$parent=end($task);		}		}			return $tree;			}

//===//无限极分类//家谱树//===方法一、function familyTree($arr,$id,$lev=1){		//static $tree=array();	 $tree=array();	foreach($arr as $v){			 	if($v['id']==$id){	 		$v['lev']=$lev;	 			 		//判断改子类是否存在父目录	 		if($v['parent'] > 0){	 			$tree=array_merge($tree,familyTree($arr,$v['parent'],$lev+1));	 			//familyTree($arr,$v['parent']);	 				 				 			}	 				 			$tree[]=$v;	 		}	} 	return $tree;	}方法二、//用迭代法来找家谱树function tree($arr,$id){	$tree=array();	while($id !==0){		foreach ($arr as $v) {					    if($v['id']==$id){		    			    	$tree[]=$v;		    	$id=$v['pa本#文来源gaodai$ma#com搞$$代**码网$rent'];		    	break;		    	}	        		}				} 		return $tree;	}

以上就介绍了PHP 无限极分类,包括了静态变量方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 无限极分类
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址