作为程序员一定要保持良好的睡眠,才能好编程

无限分类递归代码

发布时间:2016-07-25

无限分类递归代码:

//获取商品的面包屑导航  返回字符串
        public static function getGoodsPosition($navid,$delimiter=">"){
            $_tmp=self::get_goods_nav_position($navid,$delimiter);
            return "<a href='/'>首页</a> {$delimiter} ".implode("",$_tmp);
        }



        //获取商品面包屑导航  子类 返回 数组
        public static function get_goods_nav_position($navid,$delimiter="&gt;"){
            define("id","id");
            $arr=array();
            $_nav= self::getCache("goodsNav");
            foreach($_nav as $key=>$val){
                if($val[id]==$navid){
                    $arr[]="<a href='?a=listgoods&id={$val[id]}'>{$val[classname]}</a> ".$delimiter;
                    $arr=array_merge(self::get_goods_nav_position($val[pid],$delimiter),$arr);
                }
            }
            return $arr;
        }


        
        //关于商城栏目的获取        
       public static function getGoodsNav($html='--',$pid=0,$level=0){
           $arr=array();
           $_nav= self::getCache("goodsNav");
            foreach($_nav as $key=>$v){
                if($v['pid']==$pid){
                    $v['level']=$level+1;
                    $v['html']=str_repeat($html,$level);
                    $arr[]=$v;
                    $arr=array_merge($arr,self::getGoodsNav($html,$v['id'],$level+1));
                }
            }
            return $arr;
        }

        //获取一级一级的目录  sun
        public static function getGoodsNavsun($name="sun",$pid=0){
            $arr=array();
            $_nav=self::getCache("goodsNav");
            foreach($_nav as $key=>$val){
                    if($val[pid]==$pid){
                        $_tmp=self::getGoodsNavsun($name,$val[id]);
                        $val[$name]=sizeof( $_tmp)>0?$_tmp:"";
                        $arr[]=$val;
                    }
             }
            return $arr;
        }
        //查找 父类
       public static function getGoodsParents($id){
            $arr=array();
            $_nav= self::getCache("goodsNav");
            foreach($_nav as $v){
                if($v[id]==$id){
                    $arr[]=$v;
                    $arr=array_merge(self::getGoodsParents($v[pid]),$arr);
                }
            }
            return $arr;
       }

        //查找 子类所有的ID
        public static function getGoodsSunids($pid){
            $arr=array();
            $_nav= self::getCache("goodsNav");
            foreach($_nav as $key=>$val){
                if($val['pid']==$pid){
                    $arr[]=$val['id'];
                    $arr=array_merge(self::getGoodsSunids($val['id']),$arr);
                }
            }
            return $arr;
        }

        //给定一下ID获取他下面所有的子类. 数组
        public static function getGoodsSuns($pid){
            $arr=array();
            $_nav= self::getCache("goodsNav");
            foreach($_nav as $key=>$v){
                if($v['pid']==$pid){
                    $arr[]=$v;
                    //$arr=array_merge($arr,self::getGoodsSuns($v['id']));  // 如果我只想获取pid的子类,那不用执行此代码
                }
            }
            return $arr;
        }
        
        
        
        
        
        
        public function getNav($pid=0,$level=0){
     $arr=array();
     //$_nav=S("_nav"); //从缓存中读取数据
     //if(!$_nav){
         $_nav=$this->order("sortId asc")->select();
      //   S("_nav",$_nav);
     //}
     foreach($_nav as $key=>$v){
         if($v['pid']==$pid){
             $v['level']=$level;
             $arr[]=$v;
             $arr=array_merge($arr,$this->getNav($v['id'],$level+1));
         }
     }
     return $arr;
}

 //得到这个类下面所有的Ids
 public function getNavIds($_nav,$pid=0){
     $arr=array();
     foreach($_nav  as $key=>$val){
         if($val['pid']==$pid){
             $arr[]=$val['id'];
             $arr=array_merge($arr,$this->getNavIds($_nav,$val['id']));
         }
     }
     return $arr;
 }