日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php识别地址,实现地址自动识别实例(PHP)

發布時間:2023/12/1 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php识别地址,实现地址自动识别实例(PHP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

具體問題具體分析!代碼實現基于laravel完成。一個laravel完整的功能得具備這些:路由route,Model, View, Controller, 我這里用的有依賴注入服務容器等功能,當然,用到地址,你首先要有地址庫。。。

下面來看看是如何實現的,這里我只貼出核心代碼

UsersController控制器

在這里新建構造函數,實現容器的依賴注入UsersRepository

/**@varUserRepository?*/

private$userRepository;

publicfunction__construct(UsersRepository?$userRepo)

{

$this->userRepository?=?$userRepo;

}

接下來就新建地址識別的方法,?$discernDel接收的數據是從前端傳過來的,后面再貼前端代碼。? 業務代碼處理交給容器UsersRepository里的方法getDiscern處理

/**

*?Function:地址識別

*?Author:cyw0413

*@paramRequest?$request

*@returnIlluminateContractsRoutingResponseFactory|IlluminateHttpResponse|

*?LaravelLumenHttpResponseFactory|SymfonyComponentHttpFoundationResponse

*/

publicfunctiongetDiscern(Request?$request)

{

$discernDel?=?$request->input('discernDel');

try{

DB::beginTransaction();

$address?=$this->userRepository->getDiscern($discernDel);

DB::commit();

}catch(Exception$e){

DB::rollBack();

$msg?="信息提示:".$e->getMessage().",行:".$e->getLine();

returnresponse(['code'=>0,'msg'=>$msg]);

}

returnresponse(['code'=>1,'msg'=>$address]);//地址識別完成

}

來看看userRepository容器處理地址識別的各種業務代碼

/**

*?Function:識別地址

*?Author:cyw0413

*/

publicfunctiongetDiscern($discernDel)

{

if(empty($discernDel))?{

thrownewException("請傳入要識別的地址");

}

$discernDel_left?=?explode?('[',?$discernDel);

if(!isset($discernDel_left[1]))?{

thrownewException("你填寫的地址規則錯誤,手機號碼應該用[]");

}

$discernDel_right?=?explode?(']',?$discernDel_left[1]);

if(!isset($discernDel_right[1])?||empty($discernDel_right[1]))?{

thrownewException("你填寫的地址規則錯誤,手機號碼應該用[]");

}

$name?=?$discernDel_left[0];

if(empty($name))?{

thrownewException("你填寫的姓名有誤!");

}

$mobile?=?$discernDel_right[0];

if(empty($mobile)?||?checkMobile($mobile)?==0)?{

thrownewException("你填寫的手機號碼格式有誤!");

}

$address?=?trim?($discernDel_right[1]);

if(empty($address))?{

thrownewException("你填寫的地址不能為空");

}

$var_address?=$this->getAddressArrar($address);

$var_address['name']?=?$name;

$var_address['mobile']?=?$mobile;

return$var_address;

}

上面的方法處理手機,名稱,和地址處理,地址處理有些繁雜,因為有時候填寫的地址有不一樣的,比如廣西省,有些就填寫廣西壯族自治區,所以getAddressArrar方法處理地址匹配信息,根據自己的業務做調整,如下

/**

*?Function:地址的處理

*?Author:cyw0413

*@param$address

*@returnarray

*@throwsException

*/

functiongetAddressArrar($address){

//?獲取所有地址遞歸列表

$regions?=$this->getRegions();

//?初始化數據

$province?=?$city?=?$district?=?[];

//?先查找省份-第一級地區

$province?=$this->checkAddress($address,?$regions);

if($province){

$province_arr?=?['110000','300000','404100','310000'];//4個市轄區如果地址不存在二級(市轄區,縣),則特殊處理

if(!isset($province['region_code'])){

thrownewException("請正確填寫省份(市轄區)");

}

//?查找城市-第二級地區

$city?=$this->checkAddress($address,?$province['list']);

//這里只處理4個市轄區,可能還有多種情況,待發現

if(in_array($province['region_code'],$province_arr)??&&?count($city['list'])?==0){

$city?=$this->checkAddress('市轄區',?$province['list']);

if($city){

//?查找地區-第三級地區

$district?=$this->checkAddress($address,?$city['list']);

//如果沒有找到,則查找另外一個二級地區

if(!isset($district['region_code'])){

$city?=$this->checkAddress('縣',?$province['list']);

//?查找地區-第三級地區

$district?=$this->checkAddress($address,?$city['list']);

}

}

}else{

if($city){

//?查找地區-第三級地區

$district?=$this->checkAddress($address,?$city['list']);

}

}

}else{

//省份不填,報錯誤

thrownewException("省份沒填寫,請檢查");

}

return$this->getAddressInfo($address,?$province,?$city,?$district);

}

/**

*?匹配正確的城市地址

*@param$address

*@param$city_list

*@paramint?$force

*@paramint?$str_len

*@returnarray

**/

functioncheckAddress($address,?$city_list,?$force=false,?$str_len=2){

$num?=0;

$list?=array();

$result?=array();

//?遍歷所有可能存在的城市

foreach($city_list?as?$city_key=>$city){

$city_name?=?mb_substr($city['region_name'],0,?$str_len,'utf-8');

//?判斷是否存包含當前地址字符

$city_arr?=?explode($city_name,?$address);

//?如果存在相關字眼,保存該地址的所有子地址

if(count($city_arr)?>=2){

//?必須名稱長度同時達到當前比對長度

if(strlen($city['region_name'])?

continue;

}

$num?++;

if(isset($city['child'])){

$list?=?$list?+?$city['child'];

}

$result[]?=array(

'region_code'=>?$city_key,

'region_name'=>?$city['region_name'],

'list'=>$list,

);

}

}

//?如果有多個存在,則加大字符匹配長度

if($num?>1||?$force){

$region_name1?=?$result[0]['region_name'];

$region_name2?=?$result[1]['region_name'];

if(strlen($region_name1)?==?strlen($region_name2)?&&?strlen($region_name1)?==?$str_len){

$region_id1?=?$result[0]['region_code'];

$region_id2?=?$result[1]['region_code'];

$index?=?$region_id1?>?$region_id2??1:0;

$result?=?$result[$index];

return$result;

}

return$this->checkAddress($address,?$city_list,?$force,?$str_len+1);

}else{

$result[0]['list']?=?$list;

return$result[0];

}

}

/**

*?根據原地址返回詳細信息

*@param$address

*@param$province

*@param$city

*@param$area

*@returnarray

**/

functiongetAddressInfo($address,?$province,?$city,?$district){

//?查找最后出現的地址?-?截取詳細信息

if(!isset($province['region_name'])){

thrownewException("請檢查并正確填寫省份(市轄區)");

}

if(!isset($city['region_name'])){

thrownewException("請檢查并正確填寫城市");

}

if(!isset($district['region_name'])){

thrownewException("請檢查并正確填寫區域(縣/區/鎮)");

}

$find_str?='';

if($province['region_name']){

$find_str?=?$province['region_name'];

if($city['region_name']){

$find_str?=?$city['region_name'];

if(isset($district['region_name'])?&&?$district['region_name']){

$find_str?=?$district['region_name'];

}

}

}

//?截取詳細的信息

$find_str_len?=?mb_strlen($find_str,'utf-8');

for($i=0;?$i

$substr?=?mb_substr($find_str,0,$find_str_len?-?$i,'utf-8');

$end_index?=?mb_strpos($address,?$substr);

if($end_index){

$address?=?mb_substr($address,?$end_index?+?mb_strlen($substr)?,?mb_strlen($address)?-?$end_index);

}

}

!empty($find_str)?&&?$find_str?='|S*'.?$find_str;

$area['info']?=?preg_replace("/s*|,|,|:|:{$find_str}/i",'',?$address);

if(empty($area['info'])){

thrownewException("詳細地址不存在,請檢查");

}

return$address?=?[

'province'=>?$province['region_code'],

'city'=>?$city['region_code'],

'district'=>?$district['region_code'],

'info'=>?$area['info']

];

}

前端html部分代碼

基本上能看得懂的。jquery用到?getDiscern();方法,手機號碼,姓名,地址等input這里就不一一列出了。大家根據下面的jquery都能想象到

{!!?Form::label('discern','自動識別地址:',['class'=>'control-label?col-sm-2'])?!!}

{!!?Form::textarea('discern','',?['class'=>'form-textarea?form-control?form-discern','rows'=>?3])?!!}

提交識別

*查看模板

jquery代碼部分

ajax post后交給url:getDiscern 處理,這個就是上面controller的方法,success返回的數據后再追加到每個input里,最后再清除掉自動識別地址框的數據

/**

*?地址識別

*?@returns?{boolean}

*/

functiongetDiscern(){

vardiscernDel?=?$(".form-discern").val();

if(!discernDel){

alert("請輸入要識別的地址");

returnfalse;

}

$.ajax({

type:'POST',

url:"{!!?route('admin.user.getDiscern')?!!}",

data:?{

'_token':?csrf_token(),

'discernDel':?discernDel

},

dataType:'json',

timeout:50000,

success:function(res){

if(res.code?==1)?{

$("input[name='addr[linkman]']").val(res.msg.name);

$("input[name='user_name']").val(res.msg.mobile);

$("input[name='addr[address]']").val(res.msg.info);

//觸發change事件

$('#province').val(res.msg.province).trigger('change');

$('#city').val(res.msg.city).trigger('change');

$('#area').val(res.msg.district).trigger('change');

//識別后清除

$(".form-discern").val("");

}else{

alert(res.msg);

}

}

})

}

整個過程簡單,又清晰明了,以上就是小編的代碼,分享給大家,覺得哪個地方不對勁的,歡迎留言吐槽!

總結

以上是生活随笔為你收集整理的php识别地址,实现地址自动识别实例(PHP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻精品无码一区二区 | 你懂的在线视频网站 | 小色瓷导航 | 91浏览器在线观看 | 中国黄色录像一级片 | 欧美 亚洲 另类 激情 另类 | 高h全肉污文play带道具 | 免费啪啪网 | 国产精选视频在线观看 | 婷婷视频在线观看 | 亚洲美女视频一区 | 亚洲黄色片在线观看 | 国产人妻一区二区三区四区五区六 | 午夜一本| 一区二区精品视频 | 金瓶风月在线 | 亚洲色图欧美激情 | 2018中文字幕在线观看 | 精品肉丝脚一区二区三区 | 欧美性开放视频 | 久久久激情视频 | 国产欧美日韩精品一区二区三区 | 一级片啪啪| 中文久久乱码一区二区 | 东方欧美色图 | 老司机综合网 | 狠狠干天天操 | 神马午夜在线观看 | 午夜国产在线观看 | 久草手机在线 | 国产乡下妇女做爰 | 日韩女优在线播放 | 国产高清不卡 | 懂色tv | 色先锋av资源 | 国内精品人妻无码久久久影院蜜桃 | 欧美在线影院 | 欧美 亚洲 视频 | 国产精品88 | 色哟哟精品一区 | 中文字幕久久网 | 黄色靠逼视频 | 欧美人日b | 亚洲爱爱网站 | 毛片福利 | 日韩在线中文字幕 | 日韩成人中文字幕 | 最新日韩精品 | 亚洲精品a级 | 黄色同人网站 | 精品人妻无码一区二区三 | 丁香美女社区 | va在线| 91大神网址 | 中文字幕偷拍 | 久久精品国产电影 | 成人av电影免费观看 | 97精品人妻麻豆一区二区 | 奇米影视久久 | 少妇天堂网 | 夜夜嗨视频 | 欧美日韩在线免费播放 | wwwxxxxx日本| 国产精品女人精品久久久天天 | 久爱视频在线观看 | 性插插视频 | 国产精品羞羞答答在线观看 | 久草网视频在线观看 | 日日碰狠狠添天天爽无码av | 日本天堂一区 | 久久在线视频 | 日韩精品字幕 | 成人做爰的视频 | 国产一区二区在线播放视频 | 婷婷国产 | 香蕉成视频人app下载安装 | 无码久久精品国产亚洲av影片 | 婷婷麻豆 | 亚洲欧洲免费无码 | 熟妇人妻一区二区三区四区 | 国产熟妇久久777777 | 日韩一区在线视频 | 欧美日韩一区二区精品 | 糖心vlog精品一区二区 | 手机看片1024国产 | 国产中文自拍 | 日本草逼视频 | 国产午夜精品一区二区三区欧美 | 爱爱爱爱网 | 懂色av一区二区 | 久久精品国产99久久久 | 男女啪啪网站免费 | 少妇激情偷人三级 | 欧洲av一区二区三区 | 日本极品丰满ⅹxxxhd | 熟妇的味道hd中文字幕 | 老司机午夜剧场 | 丰满少妇被猛烈进入无码 | 亚洲区一区二区三区 |