PHP全國省市區地址分割提取指令碼程式

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   color   

github地址: https://github.com/zmxfree/addressapart

比如將 浙江省杭州市江幹區XX路X號 分割成 浙江省 杭州市 江幹區 XX路X號,方便excel操作。

目前支援大部分中國省市區地址資訊的分割,可以自行更新地址源資訊。

主程式碼:

<?php/**- * 省市區地址分割 * 將 浙江省杭州市江幹區XX路X號 分割成 浙江省 杭州市 江幹區 XX路X號 * User: [email protected] * Date: 14-6-18 * Time: 下午12:52 *//**此引入檔案應包含全國所有的省市區資訊 * 檔案格式為多維陣列,鍵是地名,值可以賦一個編號,供回查 * array( * [0] => array(‘浙江省‘ => ‘1‘,‘北京市‘ => ‘2‘,‘上海市‘ => ‘3‘,...), * [1] => array(‘杭州市‘ => ‘1-1‘,‘寧波市‘ => ‘1-2‘,‘市轄區(一般的直轄市會分為市轄區和周邊地區)‘ => ‘2-1,3-1‘,...), * [3] => array(‘西湖區‘  => ‘1-1-1‘,‘江幹區‘ => ‘1-1-2‘,‘海澱區‘=>‘2-1-1‘,...), * [4] => array(‘可按需求添加城鎮資訊‘) * ) * 這樣的結構CRUD操作很方便,不需要嚴格按照省市區結構分配。 */$address = include(‘address.info.php‘);$cache_file = ‘lenarr.cache.php‘;mb_internal_encoding(‘utf8‘);$len_arr = array();if (is_file($cache_file) && is_readable($cache_file)) {    //讀取省市區長度緩衝    $len_arr = include($cache_file);} else {    $fp = fopen($cache_file, ‘w‘);    //省市區的數量有很多,但長度卻是有限的,直接計算出長度,用長度去匹配,大大減少匹配次數    $len_arr[] = array_values(array_unique(array_map(‘mb_strlen‘, array_keys($address[0])))); //所有省的長度    $len_arr[] = array_values(array_unique(array_map(‘mb_strlen‘, array_keys($address[1])))); //市的長度    $len_arr[] = array_values(array_unique(array_map(‘mb_strlen‘, array_keys($address[2])))); //區的長度    //儲存檔案快取    $result = fwrite($fp, ‘<?php return ‘ . var_export($len_arr, true) . ‘;?>‘);    fclose($fp);}//讀取要分割的地址$f = ‘./address.log‘;$fstr = is_file($f) && is_readable($f) ? file_get_contents($f) : ‘‘;$add_arr = explode("\n", $fstr);if (is_array($add_arr)) {    foreach ($add_arr as $addr) {        //初始化        $l = 0;        $i = 0;        $p = 0;        $find = false;        $arr_get = array();        $addr = trim($addr);        while (!$find) {            //判斷是否超出lenarr數組的長度            if (!isset($len_arr[$l])) {                $arr_get[] = mb_substr($addr, $p, null);                $find = true;                break;            }            //截取地址            $ad = mb_substr($addr, $p, $len_arr[$l][$i]);            //匹配,匹配到就進入下一層級即$l++            if (isset($address[$l][$ad])) {                $arr_get[] = $ad; //儲存值                $p += $len_arr[$l][$i];                $i = 0;                $l++;                continue;            }            $i++;            //判斷當前層級是否迴圈完畢            //當前層級迴圈完畢仍未匹配到,則迴圈下一層級,一般是直轄市比如北京市海澱區這種情況,或者是資訊不全            if (isset($len_arr[$l]) && $i >= count($len_arr[$l])) {                echo $ad . ‘<br/>‘; //記錄下來                $i = 0;                $l++;                continue;            }        }        //分割好的地址寫入檔案        file_put_contents(‘address.detail‘, implode("\t", $arr_get) . "\n", FILE_APPEND);    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.