level代表菜单级别,前端根据此控制缩进

pid  上级分类id

代码

PHP 

1.父子并列缩进方式

查询数据库中所有菜单,进行排序

public function getCatalogTree()
    {
        $list = $this->select();
        return $this->sort($list);
    }

    public function sort($data, $pid = 0, $level = 0)
    {
        static $arr = array();
        foreach ($data as $k => $v) {
            if ($v['pid'] == $pid) {
                $v['level'] = $level;
                $arr[] = $v;
                $this->sort($data, $v['id'], $level + 1);
            }
        }
        return $arr;
    }
/**
     * 缩进
     */
    function topString(level) {
        var str = '';
        for (var i=0; i<level; i++)
        {
            str += '|----';
        }
        return str;


    }

2.父菜单包含子菜单方式

private function getTree($data, $parent_id = 0)
    {
        $tree = [];
        foreach ($data as $k => $v) {
            if ($v['parent_id'] == $parent_id) {
                $v['children'] = $this->getTree($data, $v['id']);
                $tree[] = $v;
                unset($data[$k]);
            }
        }
        return $tree;
    }