Как преобразовать строку страны в ее код ISO 3166-1, используя Zend?
Кто-нибудь знает, возможно ли использовать Zend_Locale для получения кода ISO 3166-1 для страны, если у вас есть название страны в виде строки? Например, у меня есть "Nederland", поэтому я хотел бы получить "NL".
4 ответа
Вы должны взглянуть на Zend_Locale::getTranslation(). Вы можете получить список (простой массив) названий стран - и затем вы можете использовать array_search(), чтобы получить необходимый "ключ страны"!
Я не уверен, как в Zend HTTp можно делать вызовы, но здесь, вероятно, хороший ресурс для ссылки.
Используйте геоданные Yahoo!, которые позволяют отображать строки произвольной формы в идентификаторы WOE. Для стран идентификаторы WOE - это коды ISO 3166-1.
Чтобы преобразовать строку произвольной формы в идентификатор WOE, вы можете использовать API GeoPlanet: http://developer.yahoo.com/geo/geoplanet/
Я не знаю, есть ли у Zend что-то для этого, но это довольно легко сделать самостоятельно.
Из этого туториала Вы узнаете, как получить последний список кодов стран ISO 3166-1 в формате XML, проанализировать его, а затем создать файл PHP, который можно включить, если вам нужен массив перевода кода страны:
$str = file_get_contents('http://opencountrycodes.appspot.com/xml/');
$xml = new SimpleXMLElement($str);
$out = '$countries'." = array(\n";
foreach ($xml->country as $country)
{
$out .= "'{$country['code']}' => \"{$country['name']}\",\n";
}
$out .= ");";
file_put_contents('country_names.php', $out);
Кроме того, вы можете сохранить его в виде файла CSV и загрузить его с помощью PHP fgetcsv()
функция Это, вероятно, было бы предпочтительнее ИМО. Или, черт возьми, вы можете просто сохранить XML и проанализировать его при загрузке.
Я собрал актуальную коллекцию названий стран и кодов стран ISO 3166 по адресу:
https://github.com/johannesl/Internationalization
Вы можете использовать его для преобразования как name => кода страны, так и наоборот.
Я также создаю коллекцию псевдонимов стран, которые появятся на github.