我想使用以下函数将国家/地区的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 :(得分: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;
}