2012-06-10 3 views
0

Это простая функция, которая берет zipcode в качестве входных данных, находит zipcode в правильном массиве и возвращает соответствующий город.Любые рекомендации по улучшению этой функции PHP

function zipcode_search($a){ 

$zip = (int)$a; 
//arrays of zipcodes to corresponding cities 
$FtMyers = array(33901,33902,33903,33905,33906,33907,33908,33911,33912,33913,33916,33917,33918,33919,33965,33966,33967,33990,33993,33994); 
$Naples = array(34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34112,34113,34114,34116,34117,34119,34120); 
$Cape = array(33904,33909,33910,33914,33915,33990,33991,33993); 
$PtChar = array(33948,33949,33952,33953,33954,33980,33981,33983); 
$Bonita = array(34133,34134,34135,34136); 
$Marco = array(34145,34146); 
$Estero = array(33928,33929); 
$FMBeach = array(33931,33932); 
$Sanibel = array(33957); 

    if (in_array($zip, $Naples)) 
     { 
      return "Naples, FL"; 
     } 
elseif (in_array($zip, $Marco)) 
     { 
      return "Marco Island, FL"; 
     } 
elseif (in_array($zip, $Bonita)) 
     { 
      return "Bonita Springs, FL"; 
     } 
elseif (in_array($zip, $Estero)) 
     { 
      return "Estero, FL"; 
     } 
elseif (in_array($zip, $FtMyers)) 
     { 
      return "Fort Myers, FL"; 
     } 
elseif (in_array($zip, $FMBeach)) 
     { 
      return "Ft. Myers Beach, FL"; 
     } 
elseif (in_array($zip, $Cape)) 
     { 
      return "Cape Coral, FL"; 
     } 
elseif (in_array($zip, $Sanibel)) 
     { 
      return "Sanibel Island, FL"; 
     } 
elseif (in_array($zip, $PtChar)) 
     { 
      return "Port Charlotte, FL"; 
     } 
else { return "Florida";} 
} 

Я знаю, что могу сделать это лучше и одновременно улучшить его эффективность.

+0

Я знаю, эта нить старый, но вы также можете использовать Googles API геокодирования, отправляя Google почтовый индекс и возвращает JSON или XML-файл, который затем можно разобрать чтобы получить город. Это бесплатно, если вы не отправляете более 2000 запросов в день. Вероятно, вы давно это решили, но я подумал, что это может помочь следующему парню. –

ответ

2
  • Почтовые индексы изменяются с течением времени, поэтому ваша функция не будет пуленепробиваемым. Если вам это нужно, используйте службу, например, забастовку.
  • Вам лучше хранить такой список в базе данных. (. Если вы не перечислили каждый почтовый индекс, что вам нужно справиться Это только на пороге того, что я бы сказал, что должно быть в базе данных)

ИМХО Ignacio Vazquez-Абрамс решение было бы трудно поддерживать - есть много копий &, вставляющих туда. Вот вариант, который аналогичен тому, что было изначально:

function zipcode_search($zip){ 
    $city_zips = array(
     "Naples, FL" => array(34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34112,34113,34114,34116,34117,34119,34120), 
     "Marco Island, FL" => array(34145,34146), 
     // etc 
    ); 

    foreach($city_zips as $city => $zips){ 
     if(in_array($zip, $zips)){ 
      return $city; 
     } 
    } 
} 
+0

получил опечатку, ваш arg называется $ a, но вы никогда не проверяете иглу in_array на нее;) –

+0

oops .. fixed :) – Greg

+0

Я обрабатываю каждый почтовый индекс, который мне может понадобиться в этом. Спасибо, Грег, ваше решение, безусловно, то, что я себе представлял, но не мог создать. Не могли бы вы рассказать больше о забастории? – frankV

2
$pcodes = array(33901 => "Fort Myers, FL", 33902 => "Fort Myers, FL", 
    33903 => "Fort Myers, FL", ...); 

if (isset($pcodes[$zip])) 
{ 
    return $pcodes[$zip]; 
} 
else 
{ 
    return 'Florida'; 
} 
+0

Я просто публиковал то же самое! +1 –

+1

Слишком много копий и вклеивание имен городов. – Greg

+1

@Greg: легко фиксируется путем хранения по-разному и предварительной обработки. –

1
function zipcode_search($zip){ 
    $zip_array['Fort Myers, FL'] = array(33901,33902,33903,33905,33906,33907,33908,33911,33912,33913,33916,33917,33918,33919,33965,33966,33967,33990,33993,33994); 
    //... continue.... 

    foreach($zip_array as $city => $zips){ 
     if(in_array($zip, $zips)){ 
      return $city; 
     } 
    } 
} 
Смежные вопросы