数据源放在下面了 夸克网盘
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