搜索城市国家邮政编码

| 所以我已经有了每个城市,州,邮编的位置的数据库。 我目前正在研究如何进行搜索并获取x英里以外的邮政编码的结果,并且遇到了一些麻烦。 我成功地进行了搜索,可以输入邮政编码,因为它是预定义的值。但是我对城市,州的结果感到困惑。当前,仅当您输入城市名称ex \“ Chicago \”时,此功能才有效。但是,如果您输入\“ Chicago,IL \”,则无效。 这是搜索表单$ _GET的代码searchval 请帮忙!
$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;
}
以下是实际使用$ zip或$ city并获取周围邮政编码的代码。如果您输入邮政编码,则说明该邮政编码成功运行。如果仅输入城市名称,则它可以成功运行。如果输入\“ IL,Chicago \”,它将不起作用。
       <?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;
}
    

要回复问题请先登录注册