在网站开发过程中,很多情况下都要用到省市(区)二级联动下拉菜单,比如地址信息,以及天气等API接口调用,等等,而且具有通用性,一次入库,到处使用,前面农夫庄园相关文章提到过该方法,但是网上找到的省市信息比较坑,很多将县一级的城市也列到区市里,后面还要删除,比较麻烦,后来在测试天气API的时候,找到一个更好的json格式的省市信息,应该是比较准确了,这里将相关代码列出如下,希望给大家提供帮助:
首先需要下载我提供的包含json格式省市信息的文件:sxinfo.txt
然后将该文件中的json格式数据拷贝到下面代码中相应的位置(或者你也可以从文件流中读取省市信息到字符串中,然后进行处理,这里不赘述):
<?php /* * author:农夫庄园 * website: * url:/p/5543.html */ //json格式的地区字符串 $area = <<<AREA 这里插入json格式省市信息 AREA; //将json格式的地区字符串转化为数组,不加参数true则会转化为对象 $area_array = json_decode($area, true); //echo '<pre>'; //print_r($area_array); $areas = $area_array['areas']; $pdo = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'pass'); //将相应位置替换成你的数据库对应信息 //开启事务支持 $pdo->beginTransaction(); foreach ($areas as $area): //echo '省/直辖市:'.$area['省'].'<br/>'; $province = $area['省']; $stmt = $pdo->prepare("INSERT INTO province(`name`) VALUES(:name)"); $stmt->bindParam(':name', $province); if ($stmt->execute()) { $cities = $area['市']; foreach ($cities as $city) { //echo '|---市/区/自治州:'.$city['编码'].'-'.$city['市名'].'<br/>'; $cid = $city['编码']; $name = $city['市名']; //查询省份id[province表中的name是唯一的] $query = $pdo->prepare("SELECT id FROM province WHERE name = '".$province."'"); $query->execute(); //获取省份id $pid = $query->fetchColumn(); $stmt2 = $pdo->prepare("INSERT INTO city(`id`,`name`,`p_id`) VALUES(:id,:name,:pid)"); $stmt2->bindParam(':name',$name); $stmt2->bindParam(':pid',$pid); $stmt2->bindParam(':id',$cid); if($stmt2->execute()): continue; else: echo '插入城市'.$name.'失败!'; //如果插入失败执行回滚操作 $pdo->rollBack(); $pdo=null; return; endif; } }else{ echo "插入省份".$province."失败!"; //如果插入失败执行回滚操作 $pdo->rollBack(); $pdo=null; return; } endforeach; //如果所有数据插入成功执行提交操作 $pdo->commit(); $pdo = null; ?>
至此,执行上述代码,就可以将省市信息插入你的数据库了。
- 本文固定链接: https://zxbcw.cn/post/2946/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)