2015-06-21 213 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