汉字拼音简写搜索地名

  • Jesse
  • 2017-01-16 18:16:00
  • 4702
抓取国家统计局的中国省市区县地名,转换成拼音后存储(针对手机端)

抓取国家统计局的中国省市区县地名,转换成拼音后存储

(地址已失效,请用新地址http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/

在前端用js按拼音、拼音简写或汉字搜索


citylist.png

从国家统计局抓取地址代码:

function getAdressFromUrl(){
    //来源
    $url = 'http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201608/t20160809_1386477.html';
    $data = file_get_contents($url);

    $match = array();
    preg_match('/<div style="overflow-x: hidden; word-break: break-all">(.*)<\/p><\/div>/is', $data, $match);
    $pregcont  = $match[1];
    $pregcont = str_replace('</p>', "</p>\r\n", $pregcont);
    $pregcont = preg_replace('/\s*class="(.*)"\s*|\s*style="(.*)"\s*|\s*lang="(.*)"\s*/iUs', '', $pregcont);
    $pregcont = preg_replace('/<p><span>([0-9]*)<span>[^<]*<\/span><\/span><span>( *)([^<]*)<\/span><\/p>/is', '\1\2\3', $pregcont);
    $pregcont = strip_tags( $pregcont);
    $pregcont = str_replace('              ', "   ", $pregcont);
    $pregcont = str_replace(' ', "%", $pregcont);
    $pregcont = explode("\r\n", $pregcont );

    $address = $match = $parent = $municipality = array();
    $parent_id = $parent_id2 = $id2 = $parent_key = 0;
    foreach ($pregcont as $key => $value) {
        preg_match('/([0-9]*)(%*)(.*)/is', $value,$match);
        //级别
        $level = strlen($match[2]);
        $id = $match[1];
        $name = $match[3];
        $parent[$level] = $match[1];
        @$parent_id = $parent[$level - 1]?$parent[$level - 1]:0;

        //过滤港澳台
        if (in_array($id, array('710000','810000','820000'))) {
            continue;
        }
        //过滤非直辖市下的市辖区
        if ($name == "市辖区" && $level==3) {
            continue;
        }
        //过滤市辖区、县、省直辖县级行政区划分类
        if ($name == '省直辖县级行政区划' && $level==2) {
              $parent_id2 = $parent_id;
            $id2 = $id;
            continue;
        }
        //如果是市辖区、县、省直辖县级行政区划下的分类,上级分类提升1级
        if ($parent_id == $id2 && !empty($parent_id)) {
            $parent_id = $parent_id2;
            $level = 2;
        }
        if (empty($id)) {
            continue;
        }
        //直辖市下面的“市辖区”改名为:XX市
        if ($match[3] == '市辖区' && $level == 2) {
            $name = $address[$parent_id]['name']."市";
        }
        //直辖市下面的“县”改名为:XX县
        if ($match[3] == '县' && $level == 2) {
            foreach ($address as $k => $v) {
                if ($parent_id == $v['id']) {
                    $parent_key = $k;
                }
            }
            $name = $address[$parent_key]['name']."县";
            unset($parent_key);
        }
        //直辖市去掉后面的“市”
        if (in_array($id, array('110000','120000','500000','310000'))) {
            $name = str_replace('市', '', $name);
        }

        $address[$id] = array(
            'id'    => $id,
            'parentid'    => $parent_id,
            'level'    => $level,
            'name'    => $name,
            'abbr'    => Pinyin::getShortPinyin($name),
            'pinyin'=> Pinyin::getPinyin($name)
        );
    }
    return $address;
}


拼音转换类及更多源码请看github: https://github.com/jesse7866/ChinaCitySearch