go语言实现无限极分类
本方法适合无限分类较多,查找的分类对应的子分类较少(如果无限分类超级多,最好采用分类树的方式,避免过度查询数据库),如果无限分类有限,建议用go语言实现无限极分类
// 应用分类二级菜单 AppCateNode struct { Id int64 `json:"id"` Name string `json:"name"` Sub []*AppCateNode `json:"sub"` } func (appc *AppCate) AppCateArr(pid int64) []*AppCateNode { apc := new([]*AppCate) db.GetEngine().Where("parent_id=?", pid).Find(apc) if apc == nil { return nil } apc_node := []*AppCateNode{} for _, v := range *apc { chd := appc.AppCateArr(v.Id) node := &AppCateNode{ Id: v.Id, Name: v.Name, } node.Sub = chd apc_node = append(apc_node, node) } return apc_node }
调用方法:第一次传递参数0即可。
返回结果:
[ { "id": 1, "name": "游戏", "sub": [ { "id": 3, "name": "射击游戏", "sub": [ { "id": 9, "name": "aaa", "sub": [ ] }, { "id": 10, "name": "ccc", "sub": [ ] } ] }, { "id": 4, "name": "卡牌游戏", "sub": [ ] }, { "id": 5, "name": "跑酷游戏", "sub": [ ] } ] }, { "id": 2, "name": "购物", "sub": [ { "id": 6, "name": "图书商城", "sub": [ ] }, { "id": 7, "name": "生活用品", "sub": [ ] }, { "id": 8, "name": "网上超市", "sub": [ ] } ] } ]