Loading

ThinkPHP无限级分类(递归)

代码演示

没什么可说的直接看代码

<?php
namespace app\controller;
class Category
{
    //模拟假数据
    protected static function arr()
    {
        $rows = [
            [
                'id' => '1',
                'name' => '一级菜单',
                'pid' => '0',
                'path' => '0',
            ],
            [
                'id' => '2',
                'name' => '二级菜单',
                'pid' => '0',
                'path' => '0',
            ],
            [
                'id' => '3',
                'name' => '一级菜单-1',
                'pid' => '1',
                'path' => '0-1',
            ],
            [
                'id' => '4',
                'name' => '二级菜单-1',
                'pid' => '2',
                'path' => '0-2',
            ],
            [
                'id' => '5',
                'name' => '一级菜单-1-1',
                'pid' => '3',
                'path' => '0-1-3',
            ],
            [
                'id' => '6',
                'name' => '二级菜单-1-1',
                'pid' => '4',
                'path' => '0-2-4',
            ],
            [
                'id' => '7',
                'name' => '二级菜单-1-2',
                'pid' => '4',
                'path' => '0-2-4',
            ],
            [
                'id' => '8',
                'name' => '三级菜单',
                'pid' => '0',
                'path' => '0',
            ],
            [
                'id' => '9',
                'name' => '二级菜单-1-3',
                'pid' => '4',
                'path' => '0-2-4-6',
            ],
            [
                'id' => '10',
                'name' => '三级菜单-1',
                'pid' => '8',
                'path' => '0-8',
            ],
            [
                'id' => '11',
                'name' => '一级菜单-1-4',
                'pid' => '5',
                'path' => '0-8',
            ],
        ];
        return $rows;
    }

    public function index()
    {
        //获取从第0级下的所有分类(pid==0)
        $list = $this->build_tree(0);
        return json($list);
    }

    /**
     * 递归子级
     * @param $list
     * @param $id
     * @return array
     */
    public function findChild($list, $id)
    {
        $child = [];
        foreach ($list as $key => $item) {
            //如果pid等于传进来
            if ($item['pid'] == $id) {
                $child[] = $item;
            }
        }
        return $child;
    }
    /**
     * 获取当前级别的子级
     * @param $root_id /第几层
     * @return null
     */
    public function build_tree($root_id)
    {
        //获取假数据
        $list = $this->arr();
        //查找指定级数
        $tree = $this->findChild($list, $root_id);
        if (empty($tree)) {
            return null;
        }
        //遍历获取到的层级得到下级分类
        foreach ($tree as $key => $item) {
            //递归调用自己 查找每个元素下的分类
            $child = $this->build_tree($item['id']);
            //如果有子类就放入数组中
            if ($child != null){
                $tree[$key]['child'] = $child;
            }
        }
        return $tree;
    }
} 

预览结果

image

posted @ 2021-06-27 15:08  白日醒梦  阅读(341)  评论(0编辑  收藏  举报