douxing9813 2011-06-12 16:22
浏览 33
已采纳

搜索城市州邮政编码

So i already have a database of locations of every city, state, zip.

I am currently working on how to do a search and get results of surrounding zip codes x miles away, and have run into some trouble.

I successfully have the search working for you to type in the zip code, since it is a predefined value. But am having trouble with results of a city, state. Currently it only works if you type in just the city name ex "Chicago"... But Does not work if you type in "Chicago, IL".

Here is the code for the $_GET of the search form, searchval

Please Help!

$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;
}

Below is the code that actually takes the $zip or $city and gets the surrounding zip codes. if you enter a zip code, it works successfully. If you enter just a city name, it works successfully. If you enter "Chicago, IL" it does not work.

       <?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);
    ?> 
  • 写回答

1条回答 默认 最新

  • duanguoyin7008 2011-06-15 01:44
    关注

    Was able to solve it using this function... returns an array of $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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看