无限极分类这个是不用递归查询的

无限极分类这个是不用递归查询的

 public function index(){

        $items = array(
            1 => array('id' => 1, 'sjdl' => 0, 'name' => '安徽省'),
            2 => array('id' => 2, 'sjdl' => 0, 'name' => '浙江省'),
            3 => array('id' => 3, 'sjdl' => 1, 'name' => '合肥市'),
            4 => array('id' => 4, 'sjdl' => 3, 'name' => '长丰县'),
            5 => array('id' => 5, 'sjdl' => 1, 'name' => '安庆市'),
        );

        $item = $this->make_tree($items);

        // 查询是显示耗时
        $starttime = explode(' ',microtime());
        $endtime = explode(' ',microtime());
        $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
        $thistime = round($thistime,3);
        echo "本网页执行耗时:".$thistime." 秒。".time();

        dump($item);


    }
    //无限极分类
    /*
     * @ $pk 当前 id
     * @ $pid 父级 id
     * @ $child定义下级开始 的K
     * @ 下级开始坐标
     * */
   public function make_tree($list,$pk='id',$pid='sjdl',$child='_child',$root=0){
        $tree=array();
        $packData=array();
        foreach ($list as  $data) {
            //转换为带有主键id的数组
            $packData[$data[$pk]] = $data; //$packData[1]=$data; $packData[2]=$data
        }
        foreach ($packData as $key =>$val){
            if($val[$pid]==$root){   //代表跟节点
                $tree[]= &$packData[$key];
            }else{
                //找到其父类
                $packData[$val[$pid]][$child][]= &$packData[$key];
            }
        }
        return $tree;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个基于 Golang 的无限级分类 Demo。首先,您需要定义 Category 结构体,如下所示: ```go type Category struct { ID uint `json:"id"` Name string `json:"name"` ParentID uint `json:"parent_id"` Subcategories []Category `json:"subcategories"` } ``` 然后,您需要定义一个函数来创建无限极分类。这可以通过递归实现。如下所示: ```go func createCategoryTree(categories []Category) []Category { tree := []Category{} for _, category := range categories { if category.ParentID == 0 { // this is a top-level category category.Subcategories = getSubcategories(category.ID, categories) tree = append(tree, category) } } return tree } func getSubcategories(id uint, categories []Category) []Category { subcategories := []Category{} for _, category := range categories { if category.ParentID == id { // this is a subcategory category.Subcategories = getSubcategories(category.ID, categories) subcategories = append(subcategories, category) } } return subcategories } ``` 最后,您可以在 main() 函数中使用这些函数创建分类并输出结果。示例代码如下: ```go func main() { categories := []Category{ { ID: 1, Name: "Category 1", ParentID: 0, }, { ID: 2, Name: "Subcategory 1.1", ParentID: 1, }, { ID: 3, Name: "Subcategory 1.2", ParentID: 1, }, { ID: 4, Name: "Category 2", ParentID: 0, }, { ID: 5, Name: "Subcategory 2.1", ParentID: 4, }, { ID: 6, Name: "Subcategory 2.2", ParentID: 4, }, } tree := createCategoryTree(categories) jsonResult, _ := json.Marshal(tree) fmt.Println(string(jsonResult)) } ``` 输出结果如下: ```json [ { "id": 1, "name": "Category 1", "parent_id": 0, "subcategories": [ { "id": 2, "name": "Subcategory 1.1", "parent_id": 1, "subcategories": [] }, { "id": 3, "name": "Subcategory 1.2", "parent_id": 1, "subcategories": [] } ] }, { "id": 4, "name": "Category 2", "parent_id": 0, "subcategories": [ { "id": 5, "name": "Subcategory 2.1", "parent_id": 4, "subcategories": [] }, { "id": 6, "name": "Subcategory 2.2", "parent_id": 4, "subcategories": [] } ] } ] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值