子孙树是用递归查找指定栏目的所有子类,以及子类的子类,查找家谱树是查找制定栏目的父类和父类的父类,一致到顶级类
<?php $area=array( array(‘id‘=>‘1‘,‘name‘=>‘河南‘,‘parent‘=>0), array(‘id‘=>‘2‘,‘name‘=>‘吉林‘,‘parent‘=>0), array(‘id‘=>‘3‘,‘name‘=>‘北京‘,‘parent‘=>0), array(‘id‘=>‘4‘,‘name‘=>‘信阳‘,‘parent‘=>1), array(‘id‘=>‘5‘,‘name‘=>‘郑州‘,‘parent‘=>1), array(‘id‘=>‘6‘,‘name‘=>‘长春‘,‘parent‘=>2), array(‘id‘=>‘7‘,‘name‘=>‘朝阳‘,‘parent‘=>3), array(‘id‘=>‘8‘,‘name‘=>‘海淀‘,‘parent‘=>3) ); //无限级分类之找子孙树 function subtree($arr,$id,$lev=1){ static $subs=array();//子孙数组 foreach ($arr as $v) { if($v[‘parent‘]==$id){ $v[‘lev‘]=$lev; $subs[]=$v; subtree($arr,$v[‘id‘],$lev+1); } } return $subs; } $tree =subtree($area,0,1); foreach ($tree as $v) { echo str_repeat(‘ ‘, $v[‘lev‘]),$v[‘name‘],‘<br/>‘; } // 若不用static,可以用array_merge()将数组连接起来 function subtree2($arr,$id,$lev=1){ $subs=array();//子孙数组 foreach ($arr as $v) { if($v[‘parent‘]==$id){ $v[‘lev‘]=$lev; $subs[]=$v; $subs=array_merge($subs,subtree2($arr,$v[‘id‘],$lev+1)); } } return $subs; } $tree2 =subtree2($area,0,1); foreach ($tree2 as $v) { echo str_repeat(‘ ‘, $v[‘lev‘]),$v[‘name‘],‘<br/>‘; } // 无限极分类之查找家谱树 function familytree($arr,$id){ static $tree=array(); foreach($arr as $v){ if($v[‘id‘]==$id){ //判断要不要找父栏目 if($v[‘parent‘]>0){ familytree($arr,$v[‘parent‘]); } $tree[]=$v; } } return $tree; } $fam=familytree($area,4); print_r($fam); // 迭代找家谱树 function famtree($arr,$id){ $tree=array(); while($id!==0){ foreach($arr as $v){ if($v[‘id‘]==$id){ $tree[]=$v; $id=$v[‘parent‘]; break; } } } return $tree; } print_r(famtree($area,4)); ?>
时间: 2024-10-12 06:33:14