无限级分类数组循环树循环

第一种:

控制器中增加递归程序

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}

菜单栏

function fzNode($data,$pid=0)
{
    $arr=array();
    foreach($data as $k=>$v)
    {
        if($v['pid']==$pid)
        {
            $children=fzNode($data,$v['id']);
            if(!empty($children))
            {
                $v['children']=$children;
            }else{
                $v['children']=[];
            }
            $arr[]=$v;
        }
    }
    return $arr;
}

function fzNode_layui_tree($data,$pid=0,$ruleArr)
{
    $arr=array();
    foreach($data as $k=>$v)
    {
        if($v['pid']==$pid)
        {
            if(in_array($v['id'],$ruleArr)){
                if($v['pid']!=0){
                    $v['checked'] =true;
                }
            }
            $children=fzNode_layui_tree($data,$v['id'],$ruleArr);
            if(!empty($children))
            {
                $v['children']=$children;
            }else{
                $v['children']=[];
            }
            $arr[]=$v;
        }
    }

    return $arr;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值