发布时间:2015-05-27 19:32:57作者:知识屋
话说这个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 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);
$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_id = $level > 1 ? $parent[$level - 1] : 0;
$parent[$level] = $id;
$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怎么生成圆角图片教程
用PHP构建一个留言本方法步骤 php怎么实现留言板功能
php中三元运算符用法 php中的三元运算符使用说明
php文件如何怎么打开方式介绍 php文件用什么打开方法
PHP怎么插入数据库方法步骤 php编程怎么导入数据库教程
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
PHP 获取远程文件大小的3种解决方法 如何用PHP获取远程大文件的大小
20个实用PHP实例代码 php接口开发实例代码详细介绍
如何架设PHP服务器方法步骤 怎么搭建php服务器简单教程