省市区三级联动数据+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