- php中经常用到无限级分类,牵涉到两种情况
- 找指定栏目的子孙栏目,即子孙树
- 找指定的栏目的父栏目/父栏目....顶级栏目 家谱树
假定给定的数据如下:
$data = array(
['id'=>1,'city'=>'北京','parent'=>0],
['id'=>2,'city'=>'上海','parent'=>0],
['id'=>3,'city'=>'深圳','parent'=>0],
['id'=>4,'city'=>'朝阳','parent'=>1],
['id'=>5,'city'=>'浦东','parent'=>2],
['id'=>6,'city'=>'福田','parent'=>3],
['id'=>7,'city'=>'三里屯','parent'=>4],
['id'=>8,'city'=>'浦东机场','parent'=>5],
['id'=>9,'city'=>'岗厦','parent'=>6],
['id'=>10,'city'=>'岗厦村','parent'=>9],
);
子孙树
function echoCityName($arr,$id){
if($id !== 0){
echo $arr[$id-1]['city'];
getChilrend($arr,$id);
}else{
echo 'id不存在';
}
}
function getChilrend($arr,$id=0){
//echo $arr[$id]['city'];
foreach($arr as $k=>$v){
if($v['parent'] == $id){
echo $v['city'];
return getChilrend($arr,$v['id']);
}
}
return ;
}
echoCityName($dataRes,$id=3);//寻找id为3的子孙栏目
结果
家谱树
function getParents($arr,$id){
foreach ($arr as $k => $v){
if($v['id'] == $id){
echo $v['city'];
return getParents($arr ,$v['parent']);
}
}
return ;
}
getParents($dataRes,$id=10);
echo '</br>';
getParents($dataRes,$id=8);
echo '</br>';
getParents($dataRes,$id=4);
结果