数据库中已经有三个表: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()可能无法胜任,还有别的办法吗?我分数不高,但为了解决问题,我全给了。