将国家/地区代码转换为国家名

时间:2015-06-21 10:39:23

标签: php

我想使用以下函数将国家/地区的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不能使用数组。

(显然实际的数组要长得多,为了不让我发布的代码太长,我在这里删除了一部分。)

2 个答案:

答案 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 :(得分: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;
}