使用PHP解析行政区划代码

标签: Technical PHP | 发表时间:2012-07-31 07:04 | 作者:老王
分享到:
出处:http://huoding.com

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

准备工作:需要下载 最新县及县以上行政区划代码,并保存成data.txt文件。

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

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

首先创建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;

说明:想更好的存储层次化的数据,参考: Storing Hierarchical Data in a Database

然后编写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);

$handle = fopen('data.txt', 'r');

$parent = array();

while (!feof($handle)) {
    $row = trim(fgets($handle));

    if (!preg_match('/(\d+)(\s+)(.+)/', $row, $matches)) {
        continue;
    }

    list($row, $id, $delimiter, $name) = $matches;

    if (!isset($separator)) {
        $separator = $delimiter;
    }

    $level = substr_count($delimiter, $separator);

    $parent[$level] = $id;

    $parent_id = $level > 1 ? $parent[$level - 1] : 0;

    $sth = $dbh->prepare('
        INSERT INTO region (id, parent_id, name)
        VALUES (:id, :parent_id, :name)
    ');

    $sth->bindValue(':id', $id, PDO::PARAM_INT);
    $sth->bindValue(':parent_id', $parent_id, PDO::PARAM_INT);
    $sth->bindValue(':name', $name);

    $sth->execute();
}

fclose($handle);

?>

说明:根据自己的情况填写好配置选项就可以运行了。

……

有了官方的行政区划代码,再配上民间的 纯真IP数据库,就可以百尺竿头更进一步了。

相关 [php 解析 行政区划] 推荐:

使用PHP解析行政区划代码

- - 火丁笔记
话说这个PHP脚本我已经写过好多次了,不过由于 国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也涉及到MySQL,感觉很适合做面试题,这类问题往往最能反映出求职者的基本素质. 准备工作:需要下载 最新县及县以上行政区划代码,并保存成data.txt文件. 需要注意的是表的字符集和文件的字符集需要一致.

1937民国省县两级行政区划

- 貝殼 - 萌子 的最新日记

nginx缓存html静态文件,解析php及反向代理IIS的配置

- - 开源软件 - ITeye博客
       Nginx缓存html静态文件 解析php及反向代理IIS的配置,供初学的朋友参考. server_name k; #碰到域名为k的 就交给iis来运行. proxy_pass http://k:8080/;#我的IIS上面的站点即为http://k:8080. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ { #指定缓存文件类型.

PHP导出excel

- syeye - scofield PHP开发-SEO SEM
最近做一个项目,其中涉及到了数据导成excel的功能. 后来使用了 开源的 PHPExcel  http://phpexcel.codeplex.com/ 目前最新版是1.7.6. PHPExcel 可以生成 .xls 和 .xlsx (office2007). 比如设置 excel的title,keywords,description.

PHP框架 Yaf

- Le - 开源中国社区最新软件
Yaf是一个C语言编写的PHP框架,Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用率, 降低内存占用率. 支持全局和局部两种加载规则, 方便类库共享.

PHP RFC: 让PHP的foreach支持list

- 三马 - 风雪之隅
本文地址: http://www.laruence.com/2011/07/13/2110.html. 上个月, 终于算加入了PHP developer team, 一直以来最大的障碍就是语言, 现在想起来, 当年真应该更加认真努力的去学习英语.. 得到的第一个任务是: 解决一个feature request, 请求在allow foreach($array as list($a,$b).

PHP入门指导:如何学习PHP?

- - CSDN博客编程语言推荐文章
每个人的学习方式不同,写这篇文章的目的是分享一下自己的学习过程,仅供参考,不要一味的用别人的学习方法,找对自己有用的学习方式. 经常在某些论坛和QQ群里看到一些朋友会问“怎样才能学好PHP,怎样才能学好***语言 ”,但别人回答最多的是:从最“简单”的开始. 这个简单也许真的不简单,呵呵. 下面我想分享一下自己学习的一些过程.

PHP开发宝典-PHP基础

- - CSDN博客推荐文章
<?php echo "这是xml标记风格" ?>. <script language="php" echo "这是脚本风格" /script>. echo "这是短标记风格" ?>. 要使用短标记风格,需要将php.in中的short_open_tag 设置为true.

PHP最佳实践

- xiangqian - 阮一峰的网络日志
虽然名字叫《PHP最佳实践》,但是它主要谈的不是编程规则,而是PHP应用程序的合理架构. 它提供了一种逻辑和数据分离的架构模式,属于MVC模式的一种实践. 我觉得,这是很有参考价值的学习资料,类似的文章网上并不多,所以一边学习,一边就把它翻译了出来. 根据自己的理解,我总结了它的MVC模式的实现方式(详细解释见译文):.

PHP 5.3 的 anonymous function

- Alu - Gea-Suan Lin&#39;s BLOG
在看到 PHPConf Taiwan 2011 的議程介紹後,看到有人在推薦 Slim Framework,一連上去就看到包含 anonymous function 的 sample code:. 然後回頭去翻 PHP 的說明:「Anonymous functions」,發現是從 PHP 5.3 開始支援.