第一种:
控制器中增加递归程序
public function recursion($data,$pid=0){
// 定义一个变量,存放处理好的元素
static $info= [];
// 搭建循环
foreach($data as $key=>$val){
// 当前记录的pid是上条记录权限ID
if($val['pid']==$pid){
// 赋值
$info[]=$val;
// 递归调用自身查找后代元素
// 函数自身调用自身的过程称为递归
// 当前元素的权限ID是下条记录的父级id
$this->recursion($data,$val['power_id']);
}
}
return $info;
}
第二种:封装函数放入common中保存
// 检测这个方法是否存在
if (!function_exists("types")){
//封闭方法
function types($node,$pid=0,$level=1){
//建立空数组
static $arr=[];
//循环
foreach ($node as $val){
//判断
if ($val['pid']==$pid){
$val['level']=$level;
//存入数组中
$arr[]=$val;
//递归调用查找后代
types($node,$val['p_id'],$level+1);
}
}
return $arr;
}
}
if(!function_exists("get_cate_list")){
//返回无限级分类菜单
function get_cate_list($list,$pid=0,$f=0){
//声明一个静态数组存储处理后的数据
static $arr = [];
foreach($list as $val){
if($val['pid']==$pid){
$val['level'] = $f;
$arr[]=$val;
get_cate_list($list,$val['id'],$f+1);
}
}
return $arr;
}
}
//结构树
if(!function_exists('get_tree_list')){
//引用方式实现 父子级树状结构
function get_tree_list($list){
//将每条数据中的id值作为其下标
$temp = [];
foreach($list as $v){
$v['son'] = [];
$temp[$v['id']] = $v;
}
//获取分类树
foreach($temp as $k=>$v){
$temp[$v['pid']]['son'][] = &$temp[$v['id']];
}
return isset($temp[0]['son']) ? $temp[0]['son'] : [];
}
}
第三种,在递归处理时,插入一个f字段,字段的值默认从1开始,依次递归时+1
public function recursion($data,$pid=0,$f=1){
// 定义一个变量,存放处理好的元素
static $info= [];
// 搭建循环
foreach($data as $key=>$val){
// 当前记录的pid是上条记录权限ID
if($val['pid']==$pid){
$val['f']=$f;
// 赋值
$info[]=$val;
// 递归调用自身查找后代元素
// 函数自身调用自身的过程称为递归
// 当前元素的权限ID是下条记录的父级id
$this->recursion($data,$val['power_id'],$f+1);
}
}
return $info;
}
前端展示:
{foreach $data as $val}
<p>{:str_repeat('--',($val['level']-1)*2)}{$val.p_name}</p>
{/foreach}