TP5 详细说明树形无限分类

在做菜单栏目分类的时候经常遇到,现在记录一下,个人感觉很实用。

先看一下数据库:
在这里插入图片描述写了一个接口获取数据:

   public function test(){
        $list = db('department')
            ->where('company_id=26')
            ->select();

        }
        return json(['code'=>200,'message'=>'获取成功', 'data' => $list]);
    }
}

现在从数据库查到了如下数据:

data	
0	
id	1
company_id	26
dep_name	"斑马售后部"
parent_id	0
1	
id	3
company_id	26
dep_name	"斑马开发部"
parent_id	0
2	
id	4
company_id	26
dep_name	"斑马销售部"
parent_id	0
3	
id	7
company_id	26
dep_name	"开发一部"
parent_id	3
4	
id	10
company_id	26
dep_name	"开发二部"
parent_id	3
5	
id	12
company_id	26
dep_name	"UI一部"
parent_id	3
6	
id	14
company_id	26
dep_name	"售后一部"
parent_id	1
7	
id	23
company_id	26
dep_name	"售后二部"
parent_id	1
8	
id	28
company_id	26
dep_name	"销售A组"
parent_id	4
9	
id	29
company_id	26
dep_name	"销售B组"
parent_id	4
10	
id	33
company_id	26
dep_name	"fdsaf"
parent_id	12

在前台做菜单的时候我们肯定不希望得到这样的数据,我们希望把父级菜单放到最顶部,在父栏目里有子栏目,子栏目有孙子栏目。。。。。这样可以无限分类下去。
看一下各个字段的关系,根据parent_id(父级id)可以找到父亲id。
下面开始写代码:
在Common.php里:

public function getTree($list,$pid)
    {
        $tree = array();
        foreach($list as $k => $v)
        {
            if($v['parent_id'] == $pid)
            {         //父亲找到儿子
                $v['child'] = $this->getTree($list, $v['id']);
                $tree[] = $v;
            }
        }
        return $tree;
    }

详细解释一下这段代码的意思,传的参数 l i s t 是 查 询 到 的 整 个 表 里 的 数 据 , list 是查询到的整个表里的数据, listpid是父级id,循环遍历得到的数组,如果parent_id=$pid的话找出来,就得到了父级的数据,再从父亲里面根据id招儿子,找到儿子继续从儿子里找孙子。。。。
然后引用getTree方法:

    public function test(){
        $list = db('department')
            ->where('company_id=26')
            ->select();

        $tree = array();
        if (is_array($list)) {
            $tree = $this->getTree($list,0);
        }
        return json(['code'=>200,'message'=>'获取成功', 'data' => $tree]);
    }

得到如下数据:
在这里插入图片描述很显然这样就可以了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值