php——分享一种扁平数据转树形数据的递归写法

根据pid,使用递归构建树形数据

简单的列表请求:

    /*
    商品分类列表
    请求方式:get
    请求参数:无
    */
    
    public function lists(){
        if(!$this->request->isGet())$this->error('请求失败,请使用get请求');
        $res = db('type')->select();
        !$res? $this->error('请求失败',[]): $this->success('请求成功',$res);
    }

拿到的数据:

数据表:

使用递归函数:

原理就是一个简单的递归,将其中的pid和id进行比对,先判断是否包含pid,若包含则再执行一遍函数,直到没有pid的存在,同时和id进行比对,若相同,则在当前数据项创建一个 children 属性用来存放pid相同的数据,以此来构建属性数据

public function lists(){
        if(!$this->request->isGet())$this->error('请求失败,请使用get请求');
        $res = db('type')->select();
        !$res? $this->error('请求失败',[]) : $this->success('请求成功',['mneu'=>self::toTree($res,0)]);
    }
     // 树形数据
    public function toTree( $admin_menu, $menu_pid){
        $tree = [];
        foreach ($admin_menu as $k => $v) {
            if($v['pid'] == $menu_pid){
                $childData = self::toTree($admin_menu,$v['id']);
                if(count($childData)>0){
                    $v['children'] = self::toTree($admin_menu,$v['id']);
                }
                $tree[] = $v;
            }
        }
        return $tree;
    }

再请求:

用的时候只需改几个变量即可,基本上通用

ヾ( ̄▽ ̄)Bye~Bye~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值