zoukankan      html  css  js  c++  java
  • 无限级分类--Array写法

    <?php
    class MyCate{
        /**
         * 组合成一维数组
         * @param $cateArr 数组
         * @param string $html
         * @param int $pid 上级ID
         * @param int $level 等级
         * @return array
         */
        static function unLimitedForLevel($cateArr,$html=' -- ',$pid=0,$level=0){
            $arr = array();
            foreach($cateArr as $v){
                if($v['pid']==$pid){
                    $v['level'] = $level+1;
                    $v['html'] = str_repeat($html,$level);
                    $arr[] = $v;
                    $arr = array_merge($arr,self::unLimitedForLevel($cateArr,$html,$v['id'],$level+1));
                }
            }
            return $arr;
        }
    
        /**
         * 无限级分类,组合成多级数组
         * @param $cateArr 分类数组
         * @param int $pid 上级ID
         * @return array
         */
        static function unLimitForLayer($cateArr,$pid=0){
            $arr = array();
            foreach($cateArr as $v){
                if($v['pid']==$pid){
                    $v['child'] = self::unLimitForLayer($cateArr,$v['id']);
                    $arr[] = $v;
                }
            }
            return $arr;
        }
    
        /**
         * 给自ID,得到所属父级ID数据
         * @param $cateArr 数组
         * @param $id 自身ID,递归中传PID
         * @return array
         */
        static function getParents($cateArr,$id){
            $arr = array();
            foreach($cateArr as $v){
                if($v['id']==$id){
                    $arr[] = $v;
                    #$arr = array_merge($arr,self::getParents($cateArr,$v['pid']));
                    $arr = array_merge(self::getParents($cateArr,$v['pid']),$arr);
                }
            }
            return $arr;
        }
    
        /**
         * 传递一个父级分类ID返回所有子分类ID
         */
        static function getChildsId($cateArr,$pid){
            $arr = array();
            foreach($cateArr as $v){
                if($v['pid']==$pid){
                    $arr[] = $v['id'];
                    $arr = array_merge($arr,self::getChildsId($cateArr,$v['id']));
                }
            }
            return $arr;
        }
    
    
    }
    

    # 递归和迭代的应用

    <?php
    header('Content-Type:text/html;charset=UTF-8');
    /**
     * 递归打印级联目录
     */
    function recDir($path,$level=1){
        $dh = opendir($path);
        while (false !== ($dir = readdir($dh))) {
            if($dir=='.' || $dir=='..') continue;
            echo str_repeat('&nbsp;&nbsp;', $level).$dir.'<hr>';
            if(is_dir($path.'/'.$dir)){
                recDir($path.'/'.$dir,$level+1);
            }
        }
    
        closedir($dh);
    }
    #recDir('./pmd/');
    
    
    
    // 递归创建目录
    function mk_dir($path){
        # 目录要是直接存在,返回true
        if(is_dir($path)) return true;
    
        # 判断目录的父目录是否存在,存在就可以直接创建
        if(is_dir(dirname($path))) return mkdir($path);
        
        # 如果父目录也不存在,创建父目录
        mk_dir(dirname($path));
    
        return mkdir($path);
    }
    #var_dump(mk_dir('./a/b/c/d/f/g/i'));
    
    // 递归创建目录方法2
    function mk_dir2($path){
        # 如果目录存在,直接返回
        if(is_dir($path)) return true;
        #如果目录不存在,创建
        return is_dir(dirname($path)) || mk_dir2(dirname($path))? mkdir($path) : false;
    }
    #var_dump(mk_dir2('./aa/b/c/d/f/g/i'));
    
    // 迭代创建级联目录
    function mk_dir3($path){
        $arr = array();
        while(!is_dir($path)){
            array_unshift($arr, $path);
            $path = dirname($path);
        }
        if(count($arr)<=0) return true;
    
        foreach($arr as $v){
            mkdir($v);
        }
        return true;
    }
    
    mk_dir3('./aa/b/c/d/f/g/i');
    
    // 递归删除目录
    function delDir($path){
        # 不是目录直接返回
        if(!is_dir($path)) return false;
    
        $dh = opendir($path);
        while(false !== ($row=readdir($dh))){
            if($row=='.' || $row=='..') continue;
    
            # 是否是普通文件
            if(!is_dir($path.'/'.$row)){
                unlink($path.'/'.$row);
            }else{
                delDir($path.'/'.$row);
            }
        }
        closedir($dh);
        rmdir($path);
        return true;
    }
    
    
    $area = array(
        array('id'=>1,'name'=>'北京','parent'=>0),
        array('id'=>2,'name'=>'海淀','parent'=>1),
        array('id'=>3,'name'=>'香山','parent'=>2),
        array('id'=>4,'name'=>'上地','parent'=>2),
        array('id'=>5,'name'=>'朝阳','parent'=>1),
        array('id'=>6,'name'=>'昌平','parent'=>1),
        array('id'=>7,'name'=>'顺义','parent'=>1),
        array('id'=>8,'name'=>'安徽','parent'=>0),
        array('id'=>9,'name'=>'芜湖','parent'=>8)
    );
    
    // 找子栏目
    function subTree($arr,$parentID=0,$level=1){
        static $sonArr = array();
        foreach($arr as $v){
            if($parentID == $v['parent']){
                $v['level'] = $level;
                $sonArr[] = $v;
                subTree($arr,$v['id'],$level+1);
            }
        }
        return $sonArr;
    }
    
    function subTree2($arr,$parentID=0,$level=1){
        $sonArr = array();
        foreach($arr as $v){
            if($parentID == $v['parent']){
                $v['sub'] = subTree2($arr,$v['id'],$level+1);
                $sonArr[] = $v;
                
            }
        }
        return $sonArr;
    }
    
    /*
    $a = subTree2($area,0);
    echo '<pre>';
    print_r($a);
    */
    
    function parentTree($area,$id){
        static $tree = array();
        foreach($area as $v){
            if($v['id']==$id){
                $tree[] = $v;
                if($v['parent']>0){
                    parentTree($area,$v['parent']);
                }
            }
        }
        return $tree;
    }
    
    function parentTree2($area,$id){
        $tree = array();
        foreach($area as $v){
            if($v['id']==$id){
                $tree[] = $v;
                if($v['parent']>0){
                    $tree = array_merge(parentTree2($area,$v['parent']),$tree);
                    #$tree = array_merge($tree,parentTree2($area,$v['parent']));
                }
            }
        }
        return $tree;
    }
    /*
    $a = parentTree2($area,3);
    echo '<pre>';
    print_r($a);
    */
    
    // 迭代Tree操作
    function iterationTree($arr,$id){
        $tree = array();
        while($id!==0){
            foreach($arr as $v){
                if($v['id'] == $id){
                    $tree[] = $v;
                    $id = $v['parent'];
                    break;
                }
            }
        }
    
        return $tree;
    }
    /*
    $a = iterationTree($area,3);
    echo '<pre>';
    print_r($a);
    */
    
    // 用迭代法找子孙树
    function iterationSubTree($arr,$parent=0){
        $task = array($parent); # 任务表
        $tree = array(); # 地区表
        while (count($task)>0) {
            $flag = false;
            foreach($arr as $k=>$v){
                if($v['parent']==$parent){
                    $tree[] = $v;
                    # 最新的地区ID入任务栈
                    array_push($task, $v['id']);
                    $parent = $v['id'];
                    unset($arr[$k]);
                    $flag = true; # 说明找到了子栏目
                    break;
                }
            }
            if($flag == false){
                array_pop($task);
                $parent = end($task);
            }
        }
        return $tree;
    }
    
    $a = iterationSubTree($area,0);
    echo '<pre>';
    print_r($a);
    ?>
  • 相关阅读:
    解析json字符串
    python学习(十)文件操作方式
    python学习(九)集合
    python学习(八)内存地址及深/浅拷贝
    python学习(七)列表/字典合并、布尔型、交换变量值、列表转换字符串连接和分割
    python学习(六)字符串
    Python学习(五)字典
    python学习(四)数组,字符串,元组
    python学习(四)列表(数组)
    python学习(三)字符串格式化&strip的用法&小练习
  • 原文地址:https://www.cnblogs.com/ahwu/p/3271897.html
Copyright © 2011-2022 走看看