• 无限极分类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);//下标倒序排列  
    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);//下标倒序排列
        $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,拿去用吧!

  • 相关阅读:
    什么是 CLR
    常用的数据结构以及算法
    Array和ArrayList的异同点
    什么是CMS?
    .NET Framework3.0答疑
    C#中的委托
    C#速成之三(Quick C#)
    C#速成之五(Quick C#)
    C#速成之四(Quick C#)
    类,对象,封装,接口,多态,继承
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/6423630.html
Copyright © 2020-2023  润新知