省市区三级联动数据+PHP接口

数据源放在下面了 夸克网盘

PHP接口获取省市区数据: 

 is_all :获取全部数据,不做处理

不传is_all,默认返回省级数据

传province_code 返回省级下面的市级数据

传province_code 和 city_code 返回省市下面的县区级数据

地区数据源的文件, 异常和返回格式 对应好 就可以了

    /**
     * 获取地区数据
     * @return \think\response\Json
     * @throws BusinessException
     */
    public function getAreas(): \think\response\Json
    {
        // 省份编号
        $provinceCode = $this->request->param('province_code');
        // 城市编号
        $cityCode = $this->request->param('city_code');
        // 是否全部返回
        $isAll = $this->request->param('is_all');

        // 读取地区数据文件
        $filePath = public_path() . '/static/area/citys.json';
        // 判断文件是否存在
        if (!file_exists($filePath)) {
            throw new BusinessException(Code::NOT_FOUND, '地区数据不存在');
        }

        // 读取文件 并 解析为数组
        $areaData = json_decode(file_get_contents($filePath), true);

        if (!empty($isAll) && $isAll == 1) {
            return result(Code::SUCCESS, '获取成功', $areaData);
        }

        // 如果省份编号和城市编号都为空 --> 获取省份数据
        if (empty($provinceCode) && empty($cityCode)) {

            $provinces = [];

            foreach ($areaData as $province) {

                $provinces[] = [
                    'province' => $province['province'],
                    'code' => $province['code'],
                ];

            }

            return result(Code::SUCCESS, '获取成功', $provinces);

            // 如果省份编号不为空,城市编号不为空 --> 获取城市数据
        } else if (!empty($provinceCode) && empty($cityCode)) {

            $provinceCities = [];

            foreach ($areaData as $province) {

                // 如果当前省份编号与传入的省份编号一致
                if ($province['code'] === $provinceCode) {

                    // 遍历城市
                    foreach ($province['citys'] as $city) {
                        $provinceCities[] = [
                            'city' => $city['city'],
                            'code' => $city['code'],
                        ];
                    }

                    break;
                }
            }

            // 如果城市数据为空
            if (empty($provinceCities)) {
                throw new BusinessException(Code::NOT_FOUND, '省份不存在');
            }

            return result(Code::SUCCESS, '获取成功', $provinceCities);

            // 如果省份编号不为空,城市编号不为空 --> 获取区县数据
        } else {

            $areas = [];

            foreach ($areaData as $province) {

                // 如果当前省份编号与传入的省份编号一致
                if ($province['code'] === $provinceCode) {

                    // 遍历城市
                    foreach ($province['citys'] as $city) {

                        // 如果当前城市编号与传入的城市编号一致
                        if ($city['code'] === $cityCode) {
                            $areas = $city['areas'];
                            break 2;
                        }

                    }
                }
            }

            // 如果区县数据为空
            if (empty($areas)) {
                throw new BusinessException(Code::NOT_FOUND, '城市不存在');
            }

            return result(Code::SUCCESS, '获取成功', $areas);
        }
    }

链接:下载地址
提取码:e78p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值