无限分类递归代码:
//获取商品的面包屑导航 返回字符串 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=">"){ 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; }