您的位置:首页 > 编程语言 > PHP开发

实用PHP脚本:最新县及县以上行政区划代码

2009-07-06 11:36 585 查看
作者:老王

用户注册之类的功能多半需要选择一下地区,所以有一份行政区划代码是很必要的,这份代码可以在国家统计局下载到(保存成file.txt文件,utf-8编码)。以前每次用时我都是现写转换代码,这次又重新写了一份,索性放到网上存着,免得以后麻烦,大家如果需要也可以瞧瞧。

首先创建一个表(utf-8编码):


CREATE TABLE `district` (
`id` int(10) unsigned NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
`name` char(15) NOT NULL,
PRIMARY KEY (`id`)
);

然后编写一个脚本(utf-8编码):

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('file.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;

$name = $value;
if (count($data)) {
$name .= implode('', $data);
}

$sql = "
INSERT INTO district (id, parent_id, name)
VALUES ({$id}, {$parent_id}, '{$name}')
";

mysql_query($sql);
}
fclose($handle);

注:有的地区名字带有*符号:
SELECT * FROM `district` WHERE `name` LIKE '%*%',可以手动处理。


截止2008年12月31日的数据是3525行,运行后可以确认一下是否正确。如果想更高效,还可以把数据转换成先根遍历树风格的,恕不详述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐