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));