php递归无限极分类

php 复制代码
 public function getCategoryTree()
    {
        // 模拟的数据数组
        $array = [
            ['id' => 1, 'pid' => 0, 'name' => '河北省'],
            ['id' => 2, 'pid' => 0, 'name' => '北京市'],
            ['id' => 3, 'pid' => 1, 'name' => '邯郸市'],
            ['id' => 4, 'pid' => 2, 'name' => '朝阳区'],
            ['id' => 5, 'pid' => 2, 'name' => '通州区'],
            ['id' => 6, 'pid' => 4, 'name' => '望京'],
            ['id' => 7, 'pid' => 4, 'name' => '酒仙桥'],
            ['id' => 8, 'pid' => 3, 'name' => '永年区'],
            ['id' => 9, 'pid' => 1, 'name' => '武安市'],
        ];

        // 调用递归函数生成无限极分类数组
        $categories = $this->generateTree($array);

        // 直接输出JSON格式的分类数组
        return json($categories);
    }

    /**
     * 递归生成无限极分类数组
     * @param array $data 数据源
     * @param int $pid 父级ID,默认为0
     * @return array
     * 思路:     *
     * 第一次调用$data数组,得到pid=0的根节点,为其添加children子节点,将找到的根节点赋值给$tree,然后跳出循环
     * 第二次调用$data,得到pid等于根节点的子节点
     */
    private function generateTree($data, $pid = 0)
    {
        $tree = [];
        foreach ($data as $value) {
            if ($value['pid'] == $pid) {
                $value['children'] = $this->generateTree($data, $value['id']);
                $tree[] = $value;
            }
        }
        return $tree;
    }

参考文档:https://www.cnblogs.com/zxf100/p/15166921.html

相关推荐
JSON_L11 小时前
Fastadmin 使用RabbitMQ队列
rabbitmq·php·fastadmin
Zender Han12 小时前
Flutter 新版 Google Sign-In 插件完整解析(含示例讲解)
android·flutter·ios·web
Gerardisite13 小时前
如何在微信个人号开发中有效管理API接口?
java·开发语言·python·微信·php
来来走走15 小时前
Android开发(Kotlin) LiveData的基本了解
android·开发语言·kotlin
。puppy16 小时前
MySQL 远程登录实验:通过 IP 地址跨机器连接实战指南
android·adb
dongdeaiziji16 小时前
深入理解 Kotlin 中的构造方法
android·kotlin
风起云涌~17 小时前
【Android】浅谈Navigation
android
游戏开发爱好者817 小时前
iOS 商店上架全流程解析 从工程准备到审核通过的系统化实践指南
android·macos·ios·小程序·uni-app·cocoa·iphone
QuantumLeap丶19 小时前
《Flutter全栈开发实战指南:从零到高级》- 18 -自定义绘制与画布
android·flutter·ios
.豆鲨包20 小时前
【Android】 View事件分发机制源码分析
android·java