2015-06-21 211 views
-2

我想用下面的函數來一個國家的ISO代碼轉換爲它的名字:轉換國家代碼國家名稱

function convertcodes($in, $type){ 
    $out = ""; 
    $long = array('Afghanistan' , 'Åland Islands' , 'Albania' , 'Algeria' , 'American Samoa' , 'Andorra'); 
    $short = array('af','ax','al','dz','as','ad'); 
    $in = trim($in); 
    switch($type){ 
     case 'long': 
      $out = str_replace($short, $long, $in); 
     break; 
     case 'short': 
      $out = str_replace($long, $short, $in); 
     break; 
    } 
return $out; 
} 

的問題是,它返回所有的國家,而不是說我要找的人的因爲它的匹配字符串。我怎樣才能讓它匹配確切的字符串?使用preg_replace將不適用於數組。

(顯然,實際的陣列是更長的時間,我在這裏,爲了不使我貼的代碼太長剝離的一部分。)

+0

相同指數的短對應同一指數的長度,對嗎? – DonCallisto

+0

是的,那裏沒有問題。 – Sander

+0

爲什麼不直接使用地圖? –

回答

5

我會用一個索引數組來代替。

作爲例子:

$array = [ 
    "af" => "Afghanistan", 
    "ax" => "Åland Islands", 
    // ... and so on 
]; 

這種方式,您可以使用短名稱給出檢索長名稱或反之亦然。

舉例檢索:

echo $array['af'] // returns Afghanistan 
// or 
echo array_search ("Afghanistan", $array) // returns af 

您可以使用此代碼剪斷輕鬆地轉換兩個現有數組合併爲一個(感謝@splash58):

$array = array_combine($short, $long); 
+1

@Sander你可以用'$ array = array_combine($ short,$ long);' – splash58

+0

來轉換你的2數組。但是如果我是對的,兩個陣列都需要正確的順序和長度。 :-) – Ionic

+0

這個邏輯是由於問題 – splash58

1

Ionic的解決方案是很好,可能是最好的,但如果你需要兩個陣列,請考慮以下幾點

function convertcodes($in, $type){ 
    $result = false; 
    $long = array('Afghanistan' , 'Åland Islands' , 'Albania' , 'Algeria' , 'American Samoa' , 'Andorra'); 
    $short = array('af','ax','al','dz','as','ad'); 
    $in = trim($in); 
    switch($type){ 
     case 'long': 
      $index = array_search($in, $long); 
      if ($index !== false) { 
       $result = $short[$index]; 
      } 
     break; 
     case 'short': 
      $index = array_search($in, $short); 
      if ($index !== false) { 
       $result = $long[$index]; 
      } 
     break; 
    } 
    return $result; 
} 
+0

我給你一個upvote,因爲如果有人真的需要這兩個數組,這也會對他有用。 :-) – Ionic