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

Да, @ splash58 прав. Но если я прав, для обоих массивов нужен правильный порядок и длина. :-) – Ionic

+0

Эта логика связана с вопросом – splash58

1

Ionic «s решение в порядке и вероятно, лучше, но если вам нужны два массива, рассмотрите следующий вопрос:

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

Я дал вам верх, потому что если кому-то действительно нужны оба массива, это тоже сработает для него. :-) – Ionic

Смежные вопросы