今天需要给安卓IOS端写商城分类的接口,使用原始的方法也是可以的,但是之前使用过得方法忘记怎么写了,最后想起了这个属于无限分类方面的,也属于递归操作,所以到网上查了查,最后找到了相关的方法,特此记录一下,链接如下:
https://blog.csdn.net/landylxy/article/details/55259665
具体代码如下:
/**
*方法一
*
*/
function sort($category,$parent_id=0,$level=0){
static $arr=array();
foreach($category as $k=>$v){
if($v['parent_id']==$parent_id){
$v['level']=$level;
$arr[]=$v;
unset($category[$k]);//已经排好等级的,从数组中移除,提高性能
$this->sort($category,$v['id'],$level+1);
}
}
return $arr;
}
/**
*方法二
*
*/
function sort2($category,$parent_id=0,$level=0){
$res=array();
foreach($category as $c){
if($c['parent_id']==$parent_id){
$c['level']=$level;
$arr[]=$c;
$res=array_merge($arr,$this->sort($category,$c['id'],$level+1));
}
}
return $res;
}
/**
*方法三
*
*/
/**
* 得到分类级数,并将他们的上下级关系,体现在返回数组中
* @param unknown $category
* @param number $parent_id
* @param number $level
* @return multitype:array
*/
function category($category,$parent_id=0,$level=0){
$arr=array();
foreach($category as $k=>$v){
if($v['parent_id']==$parent_id){
$v['level']=$level;
$v['child']=$this->category($category,$v['id'],$level+1);
$arr[]=$v;
}
}
return $arr;
}
我使用的是方法三,但是将此方法整合到function.php中调用的时候报错404,我打开原链接说是Using $this when not in object context,截图如下:
所以就找了个上级的控制器继承此方法,继承代码入下:
/**
* 得到分类级数,并将他们的上下级关系,体现在返回数组中
* @param unknown $category
* @param number $parent_id
* @param number $level
* @return multitype:array
*/
public function category($category,$parent_id=0,$level=0){
$arr=array();
foreach($category as $k=>$v){
if($v['parent_id']==$parent_id){
$v['level']=$level;
$v['child']=$this->category($category,$v['id'],$level+1);
$arr[]=$v;
}
}
return $arr;
}
需要注意的是继承控制器方法需要加上public,否则不能使用,最后查询商城商品分类成功!!!