递归无限极分类就是自身调用自身进行循环操作,有两种办法一种是通过等级另一种是通过数据结构进行数据循环
public function roles($data,$pid=0,$levae=0)
{
//$data为自己查询出来的数组$pid=0表示父级id$leave表示等级
//进行if判断,判断数据类型
if(!is_object($data) && !is_array($data))
{
return [];
}
//将数据转换成数组
$d=json_decode(json_encode($data),true);
$array=array();
//将数据进行foreach循环
foreach ($d as $key=> $value)
{
//判断等级为0的作为父级
if($value['p_id']==$pid)
{
//在数组中添加一个字段作为等级当数据进行前台遍历是作为判断依据,在通过数据结构的方法中这个字段可以不用添加
$value['levae']=$levae;
//将数据放到数组中
$array[$key]=$value;
//调用本身将数据进行接收
$array[$key]['son']=$this->roles($d,$value['id'],$levae+1);
}
}
//return 返回数组
return $array;
}
第二种方式
//将数据转换为数组
$data=json_decode(json_encode($data),true);
public function getRoles($data,$pid=0,$levae=0)
{
static $array=array();
foreach ($data as $key=> $value)
{
if($value['p_id']==$pid)
{
$value['levae']=$levae;
$array[]=$value;
$this->roles($d,$value['id'],$levae+1);
}
}
return $array;
}
第二种方式 通第一种方法相似但是第二种是通过$levae得等级来判断以此将数据的层级显示出来
个人拙见希望对大家有帮助