第一种:
控制器中增加递归程序
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} |