无限极分类php实现—查子孙树、家谱树
1、本文更新日期:2018/05/20 , 亲测可用,在原有基础上进行增强和 详细化 。
2、面包屑导航 和 子孙树 效果图如下:
3、代码:
<?php // 无限级分类中,查家谱树(面包屑导航) ++ 子孙树(无限极分类) $area = array( 0=>array('id'=>1,'cat_name'=>'北京市','pid'=>0), 1=>array('id'=>2,'cat_name'=>'馆陶县','pid'=>3), 2=>array('id'=>3,'cat_name'=>'海淀区','pid'=>1), 3=>array('id'=>4,'cat_name'=>'朝阳区','pid'=>1), ); function fatherTree($arr,$id) { static $Tree = array(); foreach($arr as $k=>$v) { if($v['id'] == $id) { $Tree[] = $v; fatherTree($arr,$v['pid']); } } return $Tree; } $list = fatherTree($area,2); $list2 = $list; //构成面包屑 如: 北京市 > 海淀区 > 馆陶县 ---- >>>> (不带跳转链接) krsort($list2);//index索引下标倒序排列 foreach($list2 as $v ){ $list_arr[] = $v['cat_name']; //仅含分类名称cat_name的一维数组 } $url = implode(" > ",$list_arr); echo "<pre>"; var_dump($url); //构成面包屑 如: 北京市 > 海淀区 > 馆陶县 ---- >>>> (带跳转标签<a>支持跳转) function displayCatePath($data,$id, $url='index.php?id=') { $res = fatherTree($data,$id); krsort($res);//index索引下标倒序排列 $str = ''; foreach($res as $k=>$val) { $str .= "<a href='{$url}{$val['id']}'>{$val['cat_name']}</a>>"; } return $str; } echo displayCatePath($area,10, 'cate.php?page=1&id='); echo "<br>"; // 无限级分类中,查找子孙树 function sonTree($arr,$pid = 0,$lev=1) { static $Tree = array(); foreach($arr as $k=>$v) { if($v['pid'] == $pid) { if(!isset($v['lev'])) $v['lev']=''; $v['lev'] = $lev; $Tree[] = $v; sonTree($arr,$v['id'],$lev+1); } } return $Tree; } $list = sonTree($area,0,1); foreach($list as $k=>$v) { echo str_repeat('_+',$v['lev']-1),$v['cat_name'],'<br />'; } ?>
4、over,拿去用吧!