Heim > Backend-Entwicklung > PHP-Tutorial > 使用PHP解析行政区划代码_PHP教程

使用PHP解析行政区划代码_PHP教程

WBOY
Freigeben: 2016-07-13 17:53:10
Original
1285 Leute haben es durchsucht

话说这个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文件内容的合法性,代码本身未做严禁的校验。

// 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数据库,就更完美了。

作者:老王

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478052.htmlTechArticle话说这个PHP脚本我已经写过好多次了,不过由于国家统计局提供的数据格式有些许的变化,所以我又重写了一遍,问题既涉及到PHP,同时也...
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 Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage