php+生成json+省市,PHP将JSON格式省市(区)二级数据插入数据库
在网站开发过程中,很多情况下都要用到省市(区)二级联动下拉菜单,比如地址信息,以及天气等API接口调用,等等,而且具有通用性,一次入库,到处使用,前面农夫庄园相关文章提到过该方法,但是网上找到的省市信息比较坑,很多将县一级的城市也列到区市里,后面还要删除,比较麻烦,后来在测试天气API的时候,找到一个更好的json格式的省市信息,应该是比较准确了,这里将相关代码列出如下,希望给大家提供帮助:
首先需要下载我提供的包含json格式省市信息的文件:sxinfo.txt
然后将该文件中的json格式数据拷贝到下面代码中相应的位置(或者你也可以从文件流中读取省市信息到字符串中,然后进行处理,这里不赘述):
/*
* author:农夫庄园
* website:
* url:/p/5543.html
*/
//json格式的地区字符串
$area = <<
这里插入json格式省市信息
AREA;
//将json格式的地区字符串转化为数组,不加参数true则会转化为对象
$area_array = json_decode($area, true);
//echo '
';
//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['省'].'
';
$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['市名'].'
';
$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;
?>
至此,执行上述代码,就可以将省市信息插入你的数据库了。