Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索城市国家邮政编码_Php_Mysql_Zipcode_Proximity_City - Fatal编程技术网

Php 搜索城市国家邮政编码

Php 搜索城市国家邮政编码,php,mysql,zipcode,proximity,city,Php,Mysql,Zipcode,Proximity,City,所以我已经有了一个每个城市、州、邮编的位置数据库 我目前正在研究如何进行搜索,并获得x英里外周围邮政编码的结果,但遇到了一些麻烦 我成功地让搜索工作为您输入邮政编码,因为它是一个预定义的值。但我对一个城市、一个州的结果感到很不满意。目前,只有当你只输入城市名称如“Chicago”。。。但如果你输入“芝加哥,伊利诺伊州”则不起作用 这是搜索表单searchval的$\u GET的代码 请帮忙 $searchval = $mysql->escape_data($_GET['searchval'

所以我已经有了一个每个城市、州、邮编的位置数据库

我目前正在研究如何进行搜索,并获得x英里外周围邮政编码的结果,但遇到了一些麻烦

我成功地让搜索工作为您输入邮政编码,因为它是一个预定义的值。但我对一个城市、一个州的结果感到很不满意。目前,只有当你只输入城市名称如“Chicago”。。。但如果你输入“芝加哥,伊利诺伊州”则不起作用

这是搜索表单searchval的$\u GET的代码

请帮忙

$searchval = $mysql->escape_data($_GET['searchval']);
if (!empty($searchval))
{
    if(preg_match("~\d{5}~", $searchval)) {
    $zip = $searchval;
    }
    else {
    $city = $searchval;
    }
} else
{
    $error .= "<div id='Error'>Please enter zip</div>";
    $zip = false;
}
$searchval=$mysql->escape_数据($_GET['searchval']);
如果(!空($searchval))
{
if(preg_匹配(“~\d{5}~”,$searchval)){
$zip=$searchval;
}
否则{
$city=$searchval;
}
}否则
{
$error.=“请输入zip”;
$zip=false;
}
下面是实际获取$zip或$city并获取周围邮政编码的代码。如果输入邮政编码,它将成功运行。如果只输入一个城市名称,它将成功运行。如果你输入“芝加哥,伊利诺伊州”,它将不起作用

       <?php
   //if user entered a city ex. "Chicago"
   if(isset($city)) {
    $q = 'SELECT City, State, ZipCode FROM zipcodes WHERE City like "'. $city .'%" ORDER BY ZipCode ASC Limit 0,10'; 
    $result = $mysql->query($q);
    $row = mysqli_fetch_array($result);
    $zip = $row[2];
    if(mysqli_num_rows($result) != 1) {
    echo"Did you mean...<br />";
    while($row = mysqli_fetch_array($result)) {
    echo "<a href='" .$_SERVER['PHP_SELF'] . "?searchval=".$row[2]."&miles=".$miles."'>" . $row[0] . " " . $row[1] . " " . $row[2] . "</a><br />";
    }
    }
    }
    $zcr = new ZipCodesRange($mysql,$zip,$miles);
    $zcr->setNewOrigin($zip);

    //if user entered a zip code ex. "08026"
    if($zcr->validateZipCode($zip)) {
    $citystate=$zcr->getCityState($zip);
    echo "Zip Codes Within " . $miles ." miles of " . $citystate[0] . ", " . $citystate[1] . " " . $zip;
    }

    $zcr->setZipCodesInRange();
    $zipArray = $zcr->getZipCodesInRange();
    asort($zipArray);
    $z = implode(",", array_keys($zipArray));

        $q = "SELECT * FROM " . TBL_PUBS . " WHERE zip IN ($z) AND( status = 'Pending' OR status = 'Active' )";
        $result = $mysql->query($q);
        while ($row = $result->fetch_object()) {
        $lonlat=$zcr->getLonLat($row->zip);
        $distance = $zcr->calculateDistance($lonlat[1], $lonlat[0], $zip);
    ?> 

能够使用此函数解决此问题。。。
返回$arr[city]$arr[state]$arr[zip]的数组

    function retcszarr($loc){
  $usstatenames=array('ALABAMA','ALASKA','AMERICAN SAMOA','ARIZONA','ARKANSAS','CALIFORNIA','COLORADO','CONNECTICUT','DELAWARE','DISTRICT OF COLUMBIA','FEDERATED STATES OF MICRONESIA','FLORIDA','GEORGIA','GUAM','HAWAII','IDAHO','ILLINOIS','INDIANA','IOWA','KANSAS','KENTUCKY','LOUISIANA','MAINE','MARSHALL ISLANDS','MARYLAND','MASSACHUSETTS','MICHIGAN','MINNESOTA','MISSISSIPPI','MISSOURI','MONTANA','NEBRASKA','NEVADA','NEW HAMPSHIRE','NEW JERSEY','NEW MEXICO','NEW YORK','NORTH CAROLINA','NORTH DAKOTA','NORTHERN MARIANA ISLANDS','OHIO','OKLAHOMA','OREGON','PALAU','PENNSYLVANIA','PUERTO RICO','RHODE ISLAND','SOUTH CAROLINA','SOUTH DAKOTA','TENNESSEE','TEXAS','UTAH','VERMONT','VIRGIN ISLANDS','VIRGINIA','WASHINGTON','WEST VIRGINIA','WISCONSIN','WYOMING');
  $usstateabbrs=array('AL','AK','AS','AZ','AR','CA','CO','CT','DE','DC','FM','FL','GA','GU','HI','ID','IL','IN','IA','KS','KY','LA','ME','MH','MD','MA','MI','MN','MS','MO','MT','NE','NV','NH','NJ','NM','NY','NC','ND','MP','OH','OK','OR','PW','PA','PR','RI','SC','SD','TN','TX','UT','VT','VI','VA','WA','WV','WI','WY');
    if(strpos($loc,',')!==false){
      $parts=array_map('trim',explode(',',$loc));
        $location['city']=strtoupper($parts[0]);
      preg_match('/([^ ]*)(?: +([^ ]+))?/',$parts[1],$statezip);
      if(isset($statezip[1])){
        $location['state']=strtoupper($statezip[1]);
      }
    if(isset($statezip[2])){
        $location['zip']=$statezip[2];
      }
    } else {
        $parts=array_map('trim',explode(' ',$loc));
      while(count($parts)>0){
            $part=strtoupper(array_pop($parts));
            if(in_array($part,$usstateabbrs)){
            $location['state']=$part;
          } elseif (in_array($part,$usstatenames)){
            $location['state']=$usstateabbrs[array_search($part,$usstatenames)];
          } elseif (preg_match('/\d+(?:-\d+)?/',$part,$zip)){
            $location['zip']=$zip[0];
          } else {
                $location['city']=strtoupper(implode(' ',$parts)."$part");
              break;
            }
      }
  }
    ksort($location);
    return $location;
}