PHP 分类无限级,二维数组转树形,二维数组转树形html输出,二维数组获取顶级分类

/**
     * 缓存所有商品分类
     * @return mixed
     */
    static function findAllCache()
    {
        //开发期间不缓存,直接返回所有分类
        return $goodsCate = self::select('*')->orderBy('pid', 'ASC')->orderBy('sort', 'ASC')->get()->toArray();

        /* if(Cache::has('goods_cate')){
             $goodsCate = Cache::get('goods_cate');
         }else{
             $goodsCate = self::select('*')->orderBy('pid', 'ASC')->orderBy('sort', 'ASC')->get()->toArray();
             Cache::put('goods_cate',$goodsCate,1*24);
         }
         return $goodsCate;*/
    }

    /**
     * 所有分类=>树形数组
     * 将查询到的所有分类转换成树形返回
     * @param array  $cate 所有分类,可以使用findAllCache() 查询
     * @param int $pid 初始父级
     * @return mixed
     */
    static function getTree(array $cate,$pid=0){
        $result = array();
        foreach($cate as $v){
            if($v['pid'] == $pid){
                $v['children'] =self::getTree($cate,$v['id']);
                $result[] = $v;
            }
        }
        return $result;
    }
    /**
     * 一维数组=>树形带option数组
     * 返回options递归信息
     * @param array $data 全部分类
     * @param int $pid
     * @param int $level
     * @return string
     */
    static function getTreeOption($data,$pid = 0,$level=0){
        $result = '';
        $j=0;
        foreach($data as $v){
            if($v['pid'] == $pid){
                $delimit='';
                if($level){
                    for($i=1;$i<=$level;$i++){
                        $delimit .= '&nbsp;&nbsp;';
                    }
                } else {
                    $delimit = '';
                }
                $result .= '<option value="'.$v['id'].'">'.$delimit.$v['title'].'</option>';
                $result .= self::getTreeOption($data,$v['id'],$level+1);
            }
        }
        return $result;
    }
    /**
     * 所有分类=>顶级分类
     * 将查询到的所有分类转换成顶级一维html option返回
     * @param array  $data 所有分类
     * @param int $pid 初始父级
     * @return mixed
     */
    static function getParentHtml($data,$pid = 0,$level=0,$delimit = ''){
        $result = array();
        foreach($data as $v){
            if($v['pid'] == $pid){
                if($level){
                    for($i=1;$i<=$level;$i++){
                        $delimit .= '&nbsp;&nbsp;';
                    }
                } else {
                    $delimit = '';
                }
                $result[] = '<option value="'.$v['id'].'">'.$delimit.$v['title'].'</option>';
                $res = self::getTreeOption($data,$v['id'],$level+1);
                if(is_array($res)){
                    foreach($res as $v2){
                        $result[] = $v2;
                    }
                }
            }
        }
        return $result;
    }

 

发表评论