PHP脚本建立中国县市数据库

在做快递查询的时候需要一个中国的县市数据库,由于之前的人做行政区域是用了一个Javascript脚本做的不好在后台动态交互,在网上看到了一篇关于建立中国行政区域数据库的文章,非常好,mark一下,以免以后找不到。首先需要到国家统计局下载最新的文档(打开最新的页面,全部复制下来另存为region.txt)。然后建一个数据库表region

CREATE TABLE `region` (
`id` int(10) unsigned NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;

在相同目录下建立一个文件region.php,代码如下

<?php
set_time_limit(0);
define('ENGLISH_BLANK', chr(32));
define('CHINESE_BLANK', chr(227) . chr(128) . chr(128));//  
mysql_connect('localhost', 'root', '********');
mysql_select_db('test');
mysql_query("SET NAMES 'utf8'");
$parent = array();
$handle = fopen('region.txt', 'r');
while (!feof($handle)) {
	//每次取一行
	//由于该文本时采用空格缩进来确定上下级关系的,
	//用自定义的空格字符串代替两个英文空格,
	//利用自定义的空格切分字符串,这样在转换为数组时可以确定层级
    $data = explode(CHINESE_BLANK, str_replace(
        ENGLISH_BLANK . ENGLISH_BLANK, CHINESE_BLANK, trim(fgets($handle))
    ));
    if (!is_numeric($id = array_shift($data))) {
        continue;
    }
    $level = 0;
    //如果只有两个英文空格的话,那么便是顶级了,否则级数++
    while (($value = array_shift($data)) !== false) {
        if ($value == '') {
            $level++;
        } else {
            break;
        }
    }
    $parent[$level] = $id;
    $parent_id = $level ? $parent[$level - 1] : 0;
	//构建了一个数组比如$parent[0]=110000 ;$parent[1]=110100;$parent[2]=$id;
	//这样子便可以根据它所缩进的空格数,确定它的层级,根据层级取得父id
    $name = $value;
    if (count($data)) {
        $name .= implode('', $data);
    }
    $sql = "
        INSERT INTO region (id, parent_id, name)
        VALUES ({$id}, {$parent_id}, '{$name}')
    ";
    mysql_query($sql);
}
fclose($handle);

然后在命令行运行php region.php,我的结果行数是3511。
参考链接:
实用PHP脚本:最新县及县以上行政区划代码

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据