`

区域地址收藏

    博客分类:
  • php
阅读更多

用户注册之类的功能多半需要选择一下地区,所以有一份行政区划代码是很必要的,这份代码可以在国家统计局下载到(保存成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 '%*%',可以手动处理。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics