У меня есть массив, содержащий имена языков на испанском языке:
$lang["ko"] = "coreano"; //korean $lang["ar"] = "árabe"; //arabic $lang["es"] = "español"; //spanish $lang["fr"] = "francés"; //french
Мне нужно заказать массив и поддерживать ассоциацию индексов, поэтому я использую asort () с SORT_LOCALE_STRING
setlocale(LC_ALL,'es_ES.UTF-8'); //this is at the beginning (config file) asort($lang,SORT_LOCALE_STRING); print_r($lang);
Ожидаемый результат будет в следующем порядке:
Однако это то, что я получаю:
Я что-то упускаю? Спасибо за ваш отзыв! (мой сервер использует PHP версии 5.2.13)
Попробуйте отсортировать по транслитерированным именам:
function compareASCII($a, $b) { $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a); $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b); return strcmp($at, $bt); } uasort($lang, 'compareASCII'); print_r($lang);
Вы неправильно определили свой язык в setlocale()
.
Изменить:
setlocale(LC_ALL,'es_ES.UTF-8');
Для того, чтобы:
setlocale(LC_ALL,'es_ES');
Вывод:
Array ( [ar] => árabe [ko] => coreano [es] => español [fr] => francés )
Попробуй это
setlocale(LC_COLLATE, 'nl_BE.utf8'); $array = array('coreano','árabe','español','francés'); usort($array, 'strcoll'); print_r($array);
В документации для setlocale
упоминается, что
Различные системы имеют разные схемы именования для локалей.
Возможно, ваша система не распознает локаль как es_ES
. Если вы находитесь в Windows, попробуйте esp_ESP
.