无限极分类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,拿去用吧!

 

posted @ 2017-02-21 13:04  PHP急先锋  阅读(4820)  评论(1编辑  收藏  举报