全站搜索

PHP开发制作三级城市联动效果

网站开发 390

网站上有很多jq的三级联动,主要是城市地区数据,那我们怎么获取到这些数据并且保存在我们的数据表中,

这是国家统计局的数据,下面我们用PHP程序将他们采集下来

1.数据采集

  public function countryaddress() {

        $ModelObj = D(‘Areas’);

        $baseUrl = ‘http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/’;

        //第一级

        $firstDetail = file_get_contents($baseUrl . ‘index.html’);

        $firstPattern = ‘/<td><a href=\'(\d+).html\’>(.*?)<br\/><\/a><\/td>/i’;

        preg_match_all($firstPattern, $firstDetail, $firstResult);

        $urllist = $firstResult[1];

        $namelist = $firstResult[2];

        foreach ($namelist as $k => $v) {

            $iscun = $ModelObj->where(array(‘name’ => iconv(‘GB2312’, ‘UTF-8’, $v)))->find();

            if (!$iscun) {

                $adddata = array(

                    ‘code’ => $k + 1, //省级编码暂时默认以排序号来定

                    ‘name’ => iconv(‘GB2312’, ‘UTF-8’, $v),

                    ‘parent_id’ => 0,

                );

                $first_re = $ModelObj->data($adddata)->add();

                if ($first_re) {

                    //第二级

                    $secondDetail = file_get_contents($baseUrl . $urllist[$k] . ‘.html’);

                    $secondPattern = “/<td><a href=\'” . $urllist[$k] . “\/(\d+?)\.html\’>(\d+?)<\/a><\/td><td><a href=\'” . $urllist[$k] . “\/(\d+?)\.html\’>(.*?)<\/a>/i”;

                    preg_match_all($secondPattern, $secondDetail, $secondResult);

                    $secondUrlList = $secondResult[1];

                    $secondCodeList = $secondResult[2];

                    $secondNameList = $secondResult[4];

                    foreach ($secondNameList as $m => $n) {

                        $iscun = $ModelObj->where(array(‘name’ => iconv(‘GB2312’, ‘UTF-8’, $n), ‘parent_id’ => $first_re))->find();

                        if (!$iscun) {

                            $adddata = array(

                                ‘code’ => $secondCodeList[$m],

                                ‘name’ => iconv(‘GB2312’, ‘UTF-8’, $n),

                                ‘parent_id’ => $first_re,

                            );

                            $second_re = $ModelObj->add($adddata);

                            if ($second_re) {

                                //第三级

                                $thirdDetail = file_get_contents($baseUrl . $urllist[$k] . ‘/’ . $secondUrlList[$m] . ‘.html’);

                                $thirdPattern = ‘/<td>(?:<a href=\’.*?\’>)*(\d+?)(?:<\/a>)*<\/td><td>(?:<a href=\’.*?\’>)*(.*?)(?:<\/a>)*<\/td>/i’;

                                preg_match_all($thirdPattern, $thirdDetail, $thirdResult);

                                $thirdCodeList = $thirdResult[1];

                                $thirdNameList = $thirdResult[2];

                                foreach ($thirdNameList as $p => $q) {

                                    $iscun = $ModelObj->where(array(‘name’ => iconv(‘GB2312’, ‘UTF-8’, $q), ‘parent_id’ => $second_re))->find();

                                    if (!$iscun) {

                                        $adddata = array(

                                            ‘code’ => $thirdCodeList[$p],

                                            ‘name’ => iconv(‘GB2312’, ‘UTF-8’, $q),

                                            ‘parent_id’ => $second_re,

                                        );

                                        $third_re = $ModelObj->add($adddata);

                                    }

                                }

                            }

                        }

                    }

                }

            }

        }

    }

2.省级代码替换

  /**

     * 

     */

    public function provincereplace() {

        //省级code

        $provinceCode = array(

            array(‘code’ => ‘110000’, ‘title’ => ‘北京市’),

            array(‘code’ => ‘120000’, ‘title’ => ‘天津市’),

            array(‘code’ => ‘130000’, ‘title’ => ‘河北省’),

            array(‘code’ => ‘140000’, ‘title’ => ‘山西省’),

            array(‘code’ => ‘150000’, ‘title’ => ‘内蒙古自治区’),

            array(‘code’ => ‘210000’, ‘title’ => ‘辽宁省’),

            array(‘code’ => ‘220000’, ‘title’ => ‘吉林省’),

            array(‘code’ => ‘230000’, ‘title’ => ‘黑龙江省’),

            array(‘code’ => ‘310000’, ‘title’ => ‘上海市’),

            array(‘code’ => ‘320000’, ‘title’ => ‘江苏省’),

            array(‘code’ => ‘330000’, ‘title’ => ‘浙江省’),

            array(‘code’ => ‘340000’, ‘title’ => ‘安徽省’),

            array(‘code’ => ‘350000’, ‘title’ => ‘福建省’),

            array(‘code’ => ‘360000’, ‘title’ => ‘江西省’),

            array(‘code’ => ‘370000’, ‘title’ => ‘山东省’),

            array(‘code’ => ‘410000’, ‘title’ => ‘河南省’),

            array(‘code’ => ‘420000’, ‘title’ => ‘湖北省’),

            array(‘code’ => ‘430000’, ‘title’ => ‘湖南省’),

            array(‘code’ => ‘440000’, ‘title’ => ‘广东省’),

            array(‘code’ => ‘450000’, ‘title’ => ‘广西壮族自治区’),

            array(‘code’ => ‘460000’, ‘title’ => ‘海南省’),

            array(‘code’ => ‘500000’, ‘title’ => ‘重庆市’),

            array(‘code’ => ‘510000’, ‘title’ => ‘四川省’),

            array(‘code’ => ‘520000’, ‘title’ => ‘贵州省’),

            array(‘code’ => ‘530000’, ‘title’ => ‘云南省’),

            array(‘code’ => ‘540000’, ‘title’ => ‘西藏自治区’),

            array(‘code’ => ‘610000’, ‘title’ => ‘陕西省’),

            array(‘code’ => ‘620000’, ‘title’ => ‘甘肃省’),

            array(‘code’ => ‘630000’, ‘title’ => ‘青海省’),

            array(‘code’ => ‘640000’, ‘title’ => ‘宁夏回族自治区’),

            array(‘code’ => ‘650000’, ‘title’ => ‘新疆维吾尔自治区’),

        );

        $ModelObj = D(‘Areas’);

        foreach ($provinceCode as $k => $v) {

            $ModelObj->where(array(‘name’ => $v[‘title’]))->setField(‘code’, $v[‘code’]);

        }

    }

 

3.处理级别父级代码

  /**

     * 处理级别父级代码

     */

    public function levelandparentcode() {

        $ModelObj = D(‘Areas’);

        $alllist = $ModelObj->select();

        foreach ($alllist as $k => $v) {

            if (!$v[‘parent_id’]) {

                $data = array(

                    ‘level’ => 1,

                    ‘parent_code’ => ‘0’,

                );

            } else {

                $parent = $ModelObj->where(array(‘id’ => $v[‘parent_id’]))->find();

                if (!$parent[‘parent_id’]) {

                    $data = array(

                        ‘level’ => 2,

                        ‘parent_code’ => $parent[‘code’],

                    );

                } else {

                    $data = array(

                        ‘level’ => 3,

                        ‘parent_code’ => $parent[‘code’],

                    );

                }

            }

            $re = $ModelObj->where(array(‘id’ => $v[‘id’]))->save($data);

        }

    }

 

 

4. 有了三级的数据做联动就很简单。

 <form id=”searce”>

   <div class=”screen-li”>

    <select name=”province” id=”province”>

      <option value=””>省</option>

     <volist name=”province” id=”item”> <!–循环省数据–> 

     <option value=”{$item.code}”>{$item.name}</option>

</volist>

      </select>

   </div>

 <div class=”screen-li”>

     <select   name=’city’ id=”city” >

      <option value=””>市</option>

</select>

 </div>

<div class=”screen-li”>

 <select name=’area’ id=”area” >

 <option value=””>区/县</option>   

 </select>

 </div>

<script>

   $(‘#province).change(function() {

            id=$(this).val();

            get_city(id) 

        })

      function get_city(id) {

            url_get_city=”{:U(‘city’)}?id=”+id

            $(“#city”).load(url_get_city,{n:Math.random()});

      }

$(‘#city).change(function() {

            id=$(this).val();

            get_area(id) 

   })

 

  function get_area(id) {

            url_get_area=”{:U(‘area’)}?id=”+id

            $(“#area”).load(url_get_area,{n:Math.random()});

        }

 

</script>

 

 

后台只要通过id查询出该级别下的数据就可以

上一篇: 下一篇:

相关推荐

  • PHP网站制作之curl来模拟ajax来发送数据

    383

    ajax不管是post还是get传递数据的时候是什么样的形式传递数据呢? 如果我们用curl来模拟ajax来发送数据时候,我们构造的$data应该是怎样才是标准的呢? 1、首先最容易想到的是数组结果如$data=array('a'=>1,'b'=>2); 2、还会想到json数据格式如$data=json_e...

    查看全文
  • 给企业做网站 要不要在网站设置社交分享?

    313

    一般网站新闻页,如果可以转发,都有社交分享工具,如上图,设计分享第三方免费代码有很多,搜索下就可以找到很多。在不少企业官网上,我们都能够看到社交分享按钮,这类按钮往往位于某篇文章的底部、图片的旁边、一段文案的结束区域等等。但是,也有的网站设计师放...

    查看全文
  • 建站还是小程序:商业和社交并不完全相通

    308

    互联网风风雨雨这么多年,有一个问题,始终令人不解—— 为何阿里想要做社交,但是却始终做不起来?为何社交平台不断尝试商业,但是总比不过纯商业平台?举例来说,支付宝也尝试过社交,但是社交人气总是起不来。微信的朋友圈,开始充斥广告,越来越多的人,开始讨厌...

    查看全文
  • 展会网站设计:如何提高展会网站的转化率?

    368

    策轩网络做过深圳会展中心,高交会、泰达会展、司法展等展会网站建设项目,对展会网站的设计制作稍微比较有经验,现在分享经验如下:  展会网站的一大目的就是鼓励用户注册,包括注册成为参展上和参会者。那么,展会网站在设计的时候,如何实现这一目的呢? ...

    查看全文
展开更多