前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用PHP解析行政区划代码

使用PHP解析行政区划代码

作者头像
LA0WAN9
发布2021-12-14 08:08:31
5390
发布2021-12-14 08:08:31
举报
文章被收录于专栏:火丁笔记

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

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

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

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

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

首先创建MySQL表:

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

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `places` (
    `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文件内容的合法性,代码本身未做严禁的校验。

代码语言:javascript
复制
<?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('
    REPLACE INTO places (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 - 2];

    $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);

?>

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

……

有了行政区划代码,再配上民间的IP数据库,就更完美了。本文处理的是县级行政区划代码的处理,如果你需要乡级的数据,同样可以参考国家统计局

更新:最新的行政区划代码地址改变了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先创建MySQL表:
  • 然后编写PHP脚本:
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档