php制作行政区划数据表
在我们的开发过程中,很多时候都会用到城市联动的一些信息,网上的一些数据表有些又过于陈旧数据并不是很准确。
所以通过一些api来获取城市信息并处理父子级来保存然后定期进行更新 这样既使用方便也能保证数据的准确性
那怎样处理呢
首先我们要找一个合适的api
在多方的比较下最终我们选择了高德地图的行政区划api
链接 :https://lbs.amap.com/api/webservice/guide/api/district
其数据结构如下:
准备工作:
高德地图web服务API类型key
开始代码:
//首先封装一个curl方法:
public function curl($url, $decode = true)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
// $result = ($result== null)? false: $result;
$data = $result['districts'][0]['districts'];
return $data;
}
//然后请求 并对返回数据进行处理:
这里我们使用了一个汉字转拼音的包对城市名称进行转换
链接地址:https://blog.csdn.net/qq_35164557/article/details/84989859
$key = "你的key";
$url = "https://restapi.amap.com/v3/config/district?keywords=中国&subdistrict=3&key=" . $key;
$data = $this->curl($url);
$pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');
//遍历数组进行组合
$res = [];
foreach ($data as $k => $v) {
$res[] = [
'adcode' => $v['adcode'],
'name' => $v['name'],
'first_letters' => strtoupper($pinyin->abbr(mb_substr($v['name'], 0, 1))),//strtoupper(小写转大写),mb_substr(字符串截取)
'p_adcode' => 0,
'p_name' => '中国'
];
foreach ($v['districts'] as $n => $m) {
$res[] = [
'adcode' => $m['adcode'],
'name' => $m['name'],
'first_letters' => strtoupper($pinyin->abbr(mb_substr($m['name'], 0, 1))),
'p_adcode' => $v['adcode'],
'p_name' => $v['name']
];
foreach ($m['districts'] as $a => $b) {
$res[] = [
'adcode' => $b['adcode'],
'name' => $b['name'],
'first_letters' => strtoupper($pinyin->abbr(mb_substr($b['name'], 0, 1))),
'p_adcode' => $m['adcode'],
'p_name' => $m['name']
];
}
}
}
var_dump($res);
这里我们已经我们拿到了省市县的名称并且也处理了他们的父子级关系以及首字母等
接下来就是保存了, 当然保存的形式有很多 ,例如存数据库 、存文件、都是可行的方法只要我们定期更新我们的数据 就可以保证了我们数据的准确性方便使用