php实现无限级分类
$area=array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'海淀','parent'=>7), array('id'=>3,'name'=>'濉溪县','parent'=>5), array('id'=>4,'name'=>'昌平','parent'=>7), array('id'=>5,'name'=>'淮北','parent'=>1), array('id'=>6,'name'=>'朝阳','parent'=>7), array('id'=>7,'name'=>'北京','parent'=>0), array('id'=>8,'name'=>'上地','parent'=>2) );
1.递归,查找子孙树
functionsubtree($arr,$id=0,$lev=1){ $subs=array();//子孙数组 foreach($arras$v){ if($v['parent']==$id){ $v['lev']=$lev; $subs[]=$v;//举例说找到array('id'=>1,'name'=>'安徽','parent'=>0), $subs=array_merge($subs,subtree($arr,$v['id'],$lev+1)); } } return$subs; } $tree=subtree($area,0,1); foreach($treeas$v){ echostr_repeat(' ',$v['lev']),$v['name'],'<br/>'; }
2.递归,求家谱树
家谱树的应用,如面包屑导航首页>手机类型>CDMA手机>公益PHP>递归应用
functionfamilytree($arr,$id){ $tree=array(); foreach($arras$v){ if($v['id']==$id){//判断要不要找父栏目 if($v['parent']>0){//parnet>0,说明有父栏目 $tree=array_merge($tree,familytree($arr,$v['parent'])); } $tree[]=$v;//以找到上地为例 } } return$tree; } print_r(familytree($area,8));//北京->海淀->上地
2.迭代,求家谱树
//迭代,效率比递归高,代码也没多. //找家谱树推荐用迭代 functiontree($arr,$id){ $tree=array(); while($id!==0){ foreach($arras$v){ if($v['id']==$id){ $tree[]=$v; $id=$v['parent']; break; } } } return$tree; } print_r(tree($area,8));