Heim > php教程 > php手册 > Hauptteil

使用PHP解析行政区划代码

WBOY
Freigeben: 2016-06-06 20:07:32
Original
1566 Leute haben es durchsucht

话说这个PHP脚本我已经写过好多次了,不过由于国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质。 准备工作:需要下载最新县及县以上行政区划

话说这个PHP脚本我已经写过好多次了,不过由于国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质。

准备工作:需要下载最新县及县以上行政区划代码,并保存成data.txt文件,事先需要提醒的是,如果你在拷贝粘贴的过程中出现格式错乱的问题,可以试着先把拷贝的内容粘贴到Word,WPS等软件中,然后再重新拷贝粘贴到文本文件中,通常就可以了。

最新县及县以上行政区划代码

最新县及县以上行政区划代码

说明:不同版本的数据,可能会出现全角空格和半角空格混杂的情况。

首先创建MySQL表:

需要注意的是表的字符集和文件的字符集需要一致。

CREATE TABLE IF NOT EXISTS `region` (
    `id` int(10) unsigned NOT NULL,
    `parent_id` int(10) unsigned NOT NULL,
    `name` varchar(20) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB;
Nach dem Login kopieren

补充:更好的存储层次化的数据:Storing Hierarchical Data in a Database Article。

然后编写PHP脚本:

需要注意的是自己保证data.txt文件内容的合法性,代码本身未做严禁的校验。

<?php // config
$host     = '';
$dbname   = '';
$charset  = '';
$username = '';
$password = '';
set_time_limit(0);
$dsn = "mysql:host={$host};dbname={$dbname};charset={$charset}";
$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
$dbh = new PDO($dsn, $username, $password, $options);
$sth = $dbh->prepare('
    INSERT INTO region (id, parent_id, name)
    VALUES (:id, :parent_id, :name)
');
$parent = array(0);
$handle = fopen('data.txt', 'r');
while (!feof($handle)) {
    $row = trim(str_replace(' ', ' ', fgets($handle)));
    if (!preg_match('/^(\d+)\s+(.+)$/', $row, $matches)) {
        continue;
    }
    list($row, $id, $name) = $matches;
    $level = strlen(preg_replace('/(00){1,2}$/', '', $id)) / 2;
    $parent_id = $parent[$level - 1];
    $parent[$level] = $id;
    $sth->bindValue(':id', $id, PDO::PARAM_INT);
    $sth->bindValue(':parent_id', $parent_id, PDO::PARAM_INT);
    $sth->bindValue(':name', $name);
    $sth->execute();
}
fclose($handle);
?>
Nach dem Login kopieren

说明:通过引入level变量可以消除程序里令人讨厌的「if/else」语句。

……

有了官方的行政区划代码,再配上民间的纯真IP数据库,就更完美了。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage