导入【 http://ip.qq.com/js/geo.js】外部省市县三级地区到Mysql数据库
1、QQ提供的一个外部省市县三级地区的js文件:
http://ip.qq.com/js/geo.js
我在我的HTML页面调用这个外部js文件
<script type='text/javascript' src=' http://ip.qq.com/js/geo.js' charset='GBK'></script>
如果不想调用这个外部文件,也可以另存为本地js文件
注意这里的charset='GBK' 表示这个外部文件是GBK格式的,在utf-8格式的HTML页面引入GBK格式的这个js文件必须要声明这个外部文件的编码格式,否则会乱码
这里我附上一个省市县三级联动的demo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>省市县三级联动</title>
        <script type="text/javascript" src="http://ip.qq.com/js/geo.js" charset="GBK"></script>
  </head>
  <body onload="setup();preselect('省份');promptinfo();">
            <form>
                  <select class="select" name="province" id="s1">
                      <option></option>
                  </select>
                  <select class="select" name="city" id="s2">
                      <option></option>
                  </select>
                  <select class="select" name="town" id="s3">
                      <option></option>
                  </select>
                  <input id="address" name="address" type="hidden" value="" />
                <input onclick="alert(document.getElementById('address').value); return false;" type="submit" value="提交" />
            </form>
    <script type='text/javascript'>
      //这个函数是必须的,因为在geo.js里每次更改地址时会调用此函数
      function promptinfo () {
            var address = document.getElementById('address');
            var s1 = document.getElementById('s1');
            var s2 = document.getElementById('s2');
            var s3 = document.getElementById('s3');
            address.value = s1.value + s2.value + s3.value;
      }
    </script>
  </body>
</html>
<?php
  //导入http://ip.qq.com/js/geo.js
  function getAreas () {
            $contents = file_get_contents("http://ip.qq.com/js/geo.js");//导入geo.js
            $contents = iconv("gbk", "utf-8", $contents);//与我的html页面编码不一致,所以要转码
            $reg = "/(dsy\.add.*\"\]\);)/";//找出规律,只保留我要的部分
            preg_match_all($reg, $contents, $arr);//找出规律,只保留我要的部分
/*
//$arr, 如图;
      
    */
            //规律
            $areas = array();
            foreach($arr[0] as $v) {
                  $f = str_replace(array('dsy.add(', ');', '[', ']','"',' '), array('','','','','',''), $v);//将不需要的部分替换为空字符串
                  $key = substr($f, 0, strpos($f, ','));//将0_n_x结构的部分作为键
                  $str = explode(',',substr($f, strpos($f, ',')+1));//将汉字部分作为值并且拆分成数组
                  $areas[$key] = $str;//保存到数组
            }
/*
这里得出的结果如图所示:
      
    */
            $proArr = array();//省
            $cityArr = array();//市
            $townArr = array();//县
            foreach($areas as $k => $v) {
                  $l = substr_count($k,  '_');//计算这个'_'出现的次数并且据此判断是否是省,市,县:'_'有0个-》省,'_'有1个-》市,'_'有2个-》县
                  if ($l == 0) {
                        $proArr[] = $v;//省
                  } else if ($l == 1) {
                        $cityArr[$k] = $v;//市
                  } else if ($l == 2) {
                        $townArr[$k] = $v;//县
                  }
            }
    //采用以下方式进行添加数据
            //insert into pre_ts('areaname', 'pid') values(name1, pid1),(name2, pid2),(name3, pid3)...
    $tab_name = "pre_areas";
            //省
            $p = insertAreas($proArr,$tab_name);
            //市
            $c = insertAreas($proArr,$tab_name);
            //县
            $t = insertAreas($townArr,$tab_name);
//或者其他插入数据库的方法如ThinkPHP中的M()->execute($sql);
mysql_query($p);//或者M()->execute($p);
mysql_query($c);
mysql_query($t);
}
      //定义插入数据的方法
  function insertAreas ($arr,$tab_name) {
            $insert = "insert into {$tab_name}(`areaname`,`pid`) values";
            foreach($arr as $k => $v) {
                  foreach($v as $ck => $cv) {
                        $insert .= ",('".$cv."', '".$k.'_'.$ck."')";
                  }
            }
            return $insert.substr($insert, 1);
      }
//调用这个方法
首先需要创建一个表,比如pre_areas;
    CREATE TABLE `pre_areas` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `areaname` char(16) NOT NULL,
      `pid` char(12) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4512 DEFAULT CHARSET=utf8
getAreas();
?>
说明:
存入数据库如图:
    
在数据库中根据pid可以找到子级或者是父级,需要再次调整的可以据此进行调整到适合自己的方案。
----“做每天该做的事,不计结果!”
---- 因爲對於編程還只是新手,對很多知識掌握的不牢靠,歡迎大家批評指正~~|=-=|~~
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号