Преобразование кодов стран

Существует несколько методов для кодов стран.

У меня есть список кодов с 3 символами, как на этой странице:

http://www.fina.org/H2O/index.php?option=com_content&view=category&id=93:asia&Itemid=638&layout=default

Есть ли простой способ преобразовать их в двухсимвольные? Например, "PT" из "POR" для Португалии.

Стандарт для 2-х символов — http://en.wikipedia.org/wiki/ISO_3166-1_alpha -2

Спасибо.


person James    schedule 11.08.2010    source источник
comment
Хороший вопрос, но я думаю, вам придется написать его самостоятельно или использовать какой-нибудь веб-сервис.   -  person Artefacto    schedule 11.08.2010
comment
у вас больше шансов получить список или базу данных, которые имеют прямое сопоставление PT-›ПОРТУГАЛИЯ, если вы разместите этот вопрос на gis.stackexchange.com. тогда вам не нужно беспокоиться о преобразовании 3-символьного кода в 2-символьный код...   -  person CoderHawk    schedule 11.08.2010
comment
Вы можете использовать этот веб-сайт: countryconversion.com   -  person Jens de Bruijn    schedule 13.12.2016
comment
Вы решили это? У меня такая же проблема, мне нужно преобразовать 3 буквы в 2. Если вы можете помочь, очень признателен.   -  person neena    schedule 24.01.2018


Ответы (12)


Простого пути не будет, потому что в названиях стран нет определенной схемы. Например, PT из POR в Portugal, и это может отличаться для других стран. Возможно, вы захотите создать массив для хранения двух букв для каждой страны.

Пример:

$countries = array('PT' => 'Portugal', 'UK' => 'United Kingdom');
person Sarfraz    schedule 11.08.2010
comment
это очень просто, если у вас есть массив для 2-значных ‹› 3-значных кодов стран - person Janos Szabo; 30.12.2016

Есть несколько полезных файлов данных, которые вы можете получить на http://country.io/data. Они помогут вам:

Если вы просто хотите перейти от трехбуквенных кодов к двухбуквенным кодам, вы можете просто перевернуть первую карту и использовать ее. Однако вы можете создать карту, которая переходит непосредственно от трехбуквенных кодов к названиям стран, прочесывая файлы. Вот простой пример PHP:

$codes = json_decode(file_get_contents('http://country.io/iso3.json'), true);
$names = json_decode(file_get_contents('http://country.io/names.json'), true);
$iso3_to_name = array();
foreach($codes as $iso2 => $iso3) {
    $iso3_to_name[$iso3] = $names[$iso2];
}

echo $names("PL"); // => "Poland"
echo $iso3_to_map("POL"); // => "Poland"
person Ben Dowling    schedule 10.09.2014
comment
Вызов неопределенной функции json_deocde() - person cn007b; 29.07.2015
comment
Извините, исправил опечатку. Должно было быть json_decode() - person Ben Dowling; 30.07.2015
comment
это должен быть ответ - person Oleksandr IY; 08.06.2016
comment
Знаете ли вы также список, который предоставляет «коды стран ISO2 для названий стран» на разных языках? Например, французский, немецкий, испанский и т. д.? - person Adam; 09.01.2017

Я вижу, что вопрос был задан семь лет назад. Сегодня у меня была аналогичная проблема, и я нашел одно хорошее решение. Надеюсь, что этот ответ будет полезен другим, у кого возникнет такая же проблема в будущем.

Существует отдельная библиотека, которую можно использовать https://github.com/thephpleague/iso3166.

Тогда решение будет простым. $alpha3 – трехсимвольное представление страны. А alpha2 — это двухсимвольное представление страны.

  1. $ composer require league/iso3166
  2. $data = (new League\ISO3166\ISO3166)->alpha3($alpha3);
  3. Данные выглядят следующим образом:

    [
      'name' => 'Netherlands',
      'alpha2' => 'NL',
      'alpha3' => 'NLD',
      'numeric' => '528',
      'currency' => [
        'EUR',
        ]
    ]
    
  4. $countryCodeInTwoChar = $data['alpha2']
person Turdaliev Nursultan    schedule 29.08.2017

Без фактического поиска нет простого способа: AFG (Афганистан) становится AF, а AND (Андорра) становится AD, а BLR (Беларусь) становится BY... поэтому вы не можете выполнять простые манипуляции с символами для преобразования.

Я бы предложил использовать таблицу кодов стран или добавить дополнительный столбец в любую существующую таблицу, чтобы у вас были оба кода.

person Mark Baker    schedule 11.08.2010
comment
правильно, поэтому я рекомендую разместить этот вопрос на gis.stackexchange.com - person CoderHawk; 11.08.2010
comment
Добавление дополнительного столбца, безусловно, лучший подход - person Tom Gullen; 11.08.2010

Аналогичный вопрос есть в gis.stackexchange.
https://gis.stackexchange.com/questions/603/is-a-country-state-city-database-available
Я думаю, вы получите больше информации, разместив эти вопросы в gis. http://gis.stackexchange.com

person CoderHawk    schedule 11.08.2010
comment
Насколько я понял, Игнатцу нужно преобразовать «POR» в «PT», а не IP в местоположение. - person Im0rtality; 11.08.2010
comment
@ Im0rtality - да, я знаю, что, если он получит базу данных или список сопоставлений PT - PORTUGAL, а не преобразовывает их? вот почему я рекомендовал опубликовать этот вопрос в ГИС. - person CoderHawk; 11.08.2010

Для тех, кто занимается этим, я сделал отображение JSON alpha3 в alpha2. Скачать здесь: https://api.myjson.com/bins/1y2hn

Таким образом, вы просто присвоите этот JSON объекту (например, коды стран). Теперь конвертировать просто: countryCodes["US"] //"USA"

person mike-shtil    schedule 27.07.2016
comment
Я действительно нашел это действительно полезным. Спасибо. - person Tony Paternite; 01.02.2017


Хотя это может быть долгим и болезненным методом, вполне возможно, что вам стоит написать функцию, которую вы можете сохранить навсегда, возможно, это может указать вам правильное направление:

<?php
function myCodes($in, $type){
$out = "";
$long = array('portugal', 'united kingdom');
$short = array('pt', 'uk');
$in = strtolower(trim($in));
switch($type){
case 'long':$out = str_replace($short, $long, $in);break;
case 'short':$out = str_replace($long, $short, $in);break;
}
echo $out;
}

echo myCodes('United Kingdom', 'short'); //this will echo 'uk'
echo myCodes('UK', 'long'); //this will echo 'united kingdom'

?>

Это, конечно, будет иметь несколько недостатков, таких как уверенность в том, что массивы для длинных и коротких позиций совпадают, и вам также нужно будет поддерживать функцию.

person SimonDowdles    schedule 11.08.2010

Массив на основе Json с кодами ISO 3, но не отсортированный

Вставить ссылку на корзину

И PHP-массив Вставить BIN-массив PHP

person Mudasar Rauf    schedule 23.03.2017

$mapping['POR'] = 'PT';
$shortcode = $mapping[$longcode];

person Im0rtality    schedule 11.08.2010

В ruby ​​это можно сделать следующим образом: (получите файл countryInfo.txt с http://download.geonames.org/export/dump/ )

require 'csv'
countries_iso3_map = {}
CSV.foreach('countryInfo.txt',:col_sep=>'   ',:row_sep =>:auto) do |row|
   next if row[0][0] == '#' #ignore comments section
   countries_iso3_map[row[0][0,2]]= row[1][0,3]
end
p countries_iso3_map['PT']
person tiagomatos    schedule 20.07.2011

Опираясь на другую информацию здесь, вот полная функция, готовая к работе:

function convertCountryAlphas3To2($code='') {
 $countries = json_decode('{"AFG":"AF","ALA":"AX","ALB":"AL","DZA":"DZ","ASM":"AS","AND":"AD","AGO":"AO","AIA":"AI","ATA":"AQ","ATG":"AG","ARG":"AR","ARM":"AM","ABW":"AW","AUS":"AU","AUT":"AT","AZE":"AZ","BHS":"BS","BHR":"BH","BGD":"BD","BRB":"BB","BLR":"BY","BEL":"BE","BLZ":"BZ","BEN":"BJ","BMU":"BM","BTN":"BT","BOL":"BO","BIH":"BA","BWA":"BW","BVT":"BV","BRA":"BR","VGB":"VG","IOT":"IO","BRN":"BN","BGR":"BG","BFA":"BF","BDI":"BI","KHM":"KH","CMR":"CM","CAN":"CA","CPV":"CV","CYM":"KY","CAF":"CF","TCD":"TD","CHL":"CL","CHN":"CN","HKG":"HK","MAC":"MO","CXR":"CX","CCK":"CC","COL":"CO","COM":"KM","COG":"CG","COD":"CD","COK":"CK","CRI":"CR","CIV":"CI","HRV":"HR","CUB":"CU","CYP":"CY","CZE":"CZ","DNK":"DK","DKK":"DK","DJI":"DJ","DMA":"DM","DOM":"DO","ECU":"EC","Sal":"El","GNQ":"GQ","ERI":"ER","EST":"EE","ETH":"ET","FLK":"FK","FRO":"FO","FJI":"FJ","FIN":"FI","FRA":"FR","GUF":"GF","PYF":"PF","ATF":"TF","GAB":"GA","GMB":"GM","GEO":"GE","DEU":"DE","GHA":"GH","GIB":"GI","GRC":"GR","GRL":"GL","GRD":"GD","GLP":"GP","GUM":"GU","GTM":"GT","GGY":"GG","GIN":"GN","GNB":"GW","GUY":"GY","HTI":"HT","HMD":"HM","VAT":"VA","HND":"HN","HUN":"HU","ISL":"IS","IND":"IN","IDN":"ID","IRN":"IR","IRQ":"IQ","IRL":"IE","IMN":"IM","ISR":"IL","ITA":"IT","JAM":"JM","JPN":"JP","JEY":"JE","JOR":"JO","KAZ":"KZ","KEN":"KE","KIR":"KI","PRK":"KP","KOR":"KR","KWT":"KW","KGZ":"KG","LAO":"LA","LVA":"LV","LBN":"LB","LSO":"LS","LBR":"LR","LBY":"LY","LIE":"LI","LTU":"LT","LUX":"LU","MKD":"MK","MDG":"MG","MWI":"MW","MYS":"MY","MDV":"MV","MLI":"ML","MLT":"MT","MHL":"MH","MTQ":"MQ","MRT":"MR","MUS":"MU","MYT":"YT","MEX":"MX","FSM":"FM","MDA":"MD","MCO":"MC","MNG":"MN","MNE":"ME","MSR":"MS","MAR":"MA","MOZ":"MZ","MMR":"MM","NAM":"NA","NRU":"NR","NPL":"NP","NLD":"NL","ANT":"AN","NCL":"NC","NZL":"NZ","NIC":"NI","NER":"NE","NGA":"NG","NIU":"NU","NFK":"NF","MNP":"MP","NOR":"NO","OMN":"OM","PAK":"PK","PLW":"PW","PSE":"PS","PAN":"PA","PNG":"PG","PRY":"PY","PER":"PE","PHL":"PH","PCN":"PN","POL":"PL","PRT":"PT","PRI":"PR","QAT":"QA","REU":"RE","ROU":"RO","RUS":"RU","RWA":"RW","BLM":"BL","SHN":"SH","KNA":"KN","LCA":"LC","MAF":"MF","SPM":"PM","VCT":"VC","WSM":"WS","SMR":"SM","STP":"ST","SAU":"SA","SEN":"SN","SRB":"RS","SYC":"SC","SLE":"SL","SGP":"SG","SVK":"SK","SVN":"SI","SLB":"SB","SOM":"SO","ZAF":"ZA","SGS":"GS","SSD":"SS","ESP":"ES","LKA":"LK","SDN":"SD","SUR":"SR","SJM":"SJ","SWZ":"SZ","SWE":"SE","CHE":"CH","SYR":"SY","TWN":"TW","TJK":"TJ","TZA":"TZ","THA":"TH","TLS":"TL","TGO":"TG","TKL":"TK","TON":"TO","TTO":"TT","TUN":"TN","TUR":"TR","TKM":"TM","TCA":"TC","TUV":"TV","UGA":"UG","UKR":"UA","ARE":"AE","GBR":"GB","USA":"US","UMI":"UM","URY":"UY","UZB":"UZ","VUT":"VU","VEN":"VE","VNM":"VN","VIR":"VI","WLF":"WF","ESH":"EH","YEM":"YE","ZMB":"ZM","ZWE":"ZW","GBP":"GB","RUB":"RU","NOK":"NO"}',true);
 $out = $countries[$code];
 return $out;
}
person mayersdesign    schedule 04.11.2018