PHP如何匹配省市区,要比较全面的。
时间:2011-12-13
来源:互联网
数据库中已经有三个表:tb_provinces tb_citys tb_areas,分别存有省,市,区数据。
最近弄网站时,碰到一个问题。我已经用纯真数据库成功地获得了用户的真实地址。
但这个真实地址要和那三个表的数据库匹配,以获得相关的省市区代码。
比如:现在纯真IP获得真实地址是:
而数据库里有:广东省 广州市 天河区
我的代码如下现在就是想用把$my_realadd里自动匹配出来。。。。
$my_realadd="广东省广州市天河区软件园";
$pca_sql="SELECT * FROM tb_common_provinces as a,tb_common_citys as b,tb_common_areas as c WHERE a.province_code=b.province_code AND b.city_code=c.city_code";
$pca_res=mysql_query($pca_sql);
$i=mysql_num_rows($pca_res);
$j=1;
while($i>0){
$pca_row=mysql_fetch_array($pca_res);
$cp_str=$pca_row['province_name'];//省名
$cc_str=$pca_row['city_name'];//城市名
$ca_str=$pca_row['area_name'];//地区名
//应该还要折分得更细或用相似度判断
//要先从小的判断,即选判断区县,再判断城市,再判断省份
//$cpca_result_a=(strpos($my_realadd,$ca_str)!==false)?'true':'false';//查看有无区名
if(strpos($my_realadd,$ca_str)!==false){
$real_area_code=$pca_row['area_code'];
$real_city_code=$pca_row['city_code'];
$real_province_code=$pca_row['province_code'];
$real_c_state='only_area';
$test_str='查询结果12:'.$i.'区县代码'.$real_area_code.'市代码'.$real_city_code.'省代码'.$real_province_code.'状态是'.$real_c_state='only_area';
}
else if(strpos($my_realadd,$cc_str)!==false){
$real_city_code=$pca_row['city_code'];
$real_province_code=$pca_row['province_code'];
$real_c_state='only_city';
$test_str='查询结果:'.$cpca_num.'省份是:'.$cpca_result_p.'市是:'.$cpca_result_c.'区县是:'.$cpca_result_a.'市代码'.$real_city_code.'省代码'.$real_province_code.'状态是'.$real_c_state='only_city';
}/*
else{
$cpca_result_p=(strpos($my_realadd,$cp_str)!==false)?'true':'false';//查看有无省名
if($cpca_result_p=='true'){
$real_province_code=$pca_row['province_code'];
$real_c_state='only_province';
$test_str='查询结果:'.$cpca_num.'省份是:'.$cpca_result_p.'市是:'.$cpca_result_c.'区县是:'.$cpca_result_a.'省代码'.$real_province_code.'状态是'.$real_c_state='only_province';
}
else{
$test_str='不能匹配';
}
}
}*/
$i--;
$j++;
}
但结果判断总是“不能匹配”,,照理说区为真(即能匹配)时就不要执行else,但就是总是这个结果。strpos()这个函数查过是这样用的。各路高手帮帮我吧。。。。
另外补充的是:
$cp_str=$pca_row['province_name'];//省名
$cc_str=$pca_row['city_name'];//城市名
$ca_str=$pca_row['area_name'];//地区名
这样获得的是我数据库里的省市区名,但真实地址中,有些是“自治区”“特别行政区”等,也就是能不以做模糊匹配,比如香港,香港市,香港特别行政区,应该是同一个结果。用strpos()可能无法胜任,还有别的办法吗?
我分数不高,但为了解决问题,我全给了。
最近弄网站时,碰到一个问题。我已经用纯真数据库成功地获得了用户的真实地址。
但这个真实地址要和那三个表的数据库匹配,以获得相关的省市区代码。
比如:现在纯真IP获得真实地址是:
而数据库里有:广东省 广州市 天河区
我的代码如下现在就是想用把$my_realadd里自动匹配出来。。。。
$my_realadd="广东省广州市天河区软件园";
$pca_sql="SELECT * FROM tb_common_provinces as a,tb_common_citys as b,tb_common_areas as c WHERE a.province_code=b.province_code AND b.city_code=c.city_code";
$pca_res=mysql_query($pca_sql);
$i=mysql_num_rows($pca_res);
$j=1;
while($i>0){
$pca_row=mysql_fetch_array($pca_res);
$cp_str=$pca_row['province_name'];//省名
$cc_str=$pca_row['city_name'];//城市名
$ca_str=$pca_row['area_name'];//地区名
//应该还要折分得更细或用相似度判断
//要先从小的判断,即选判断区县,再判断城市,再判断省份
//$cpca_result_a=(strpos($my_realadd,$ca_str)!==false)?'true':'false';//查看有无区名
if(strpos($my_realadd,$ca_str)!==false){
$real_area_code=$pca_row['area_code'];
$real_city_code=$pca_row['city_code'];
$real_province_code=$pca_row['province_code'];
$real_c_state='only_area';
$test_str='查询结果12:'.$i.'区县代码'.$real_area_code.'市代码'.$real_city_code.'省代码'.$real_province_code.'状态是'.$real_c_state='only_area';
}
else if(strpos($my_realadd,$cc_str)!==false){
$real_city_code=$pca_row['city_code'];
$real_province_code=$pca_row['province_code'];
$real_c_state='only_city';
$test_str='查询结果:'.$cpca_num.'省份是:'.$cpca_result_p.'市是:'.$cpca_result_c.'区县是:'.$cpca_result_a.'市代码'.$real_city_code.'省代码'.$real_province_code.'状态是'.$real_c_state='only_city';
}/*
else{
$cpca_result_p=(strpos($my_realadd,$cp_str)!==false)?'true':'false';//查看有无省名
if($cpca_result_p=='true'){
$real_province_code=$pca_row['province_code'];
$real_c_state='only_province';
$test_str='查询结果:'.$cpca_num.'省份是:'.$cpca_result_p.'市是:'.$cpca_result_c.'区县是:'.$cpca_result_a.'省代码'.$real_province_code.'状态是'.$real_c_state='only_province';
}
else{
$test_str='不能匹配';
}
}
}*/
$i--;
$j++;
}
但结果判断总是“不能匹配”,,照理说区为真(即能匹配)时就不要执行else,但就是总是这个结果。strpos()这个函数查过是这样用的。各路高手帮帮我吧。。。。
另外补充的是:
$cp_str=$pca_row['province_name'];//省名
$cc_str=$pca_row['city_name'];//城市名
$ca_str=$pca_row['area_name'];//地区名
这样获得的是我数据库里的省市区名,但真实地址中,有些是“自治区”“特别行政区”等,也就是能不以做模糊匹配,比如香港,香港市,香港特别行政区,应该是同一个结果。用strpos()可能无法胜任,还有别的办法吗?
我分数不高,但为了解决问题,我全给了。
作者: soroner 发布时间: 2011-12-13
自己搞定了。我太粗心了。
作者: soroner 发布时间: 2011-12-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28