Вопрос по php – Сортировать массив со специальными символами в PHP

9

У меня есть массив, который содержит названия языков на испанском языке:

$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);

Ожидаемый результат будет в следующем порядке:

Array ( [ar] => árabe [ko] => coreano [es] => español [fr] => francés )

Однако вот что я получаю:

Array ( [ko] => coreano [es] => español [fr] => francés [ar] => árabe )

Я что-то пропустил? Спасибо за ваш отзыв! (мой сервер использует PHP версии 5.2.13)

ок, тогда удачи :) Andreas Wong
да, это нормально. он работает со всеми другими языковыми функциями, такими как strftime (). Andres SK
Вот почему я использую SORT_LOCALE_STRING. & APOS; & # XE1; & APOS; должен прийти после 'a'; и до "с". Andres SK
Дикая догадка: возможно потому чтоc приходит раньшеá ? Andreas Wong
Вы проверили возвращаемое значениеsetlocale? Скорее всего, это просто не удалось. Jon

Ваш Ответ

4   ответа
0

setlocale(LC_COLLATE, 'nl_BE.utf8');
$array = array('coreano','árabe','español','francés');
usort($array, 'strcoll'); 
print_r($array);
Error: User Rate Limit Exceeded Andres SK
8

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);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Andres SK
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededin GreekError: User Rate Limit Exceeded
1

setlocale упоминает, что

Different systems have different naming schemes for locales.

Возможно, что ваша система не распознает локаль какes_ES, Если вы используете Windows, попробуйтеesp_ESP вместо.

Error: User Rate Limit Exceeded Andres SK
2

setlocale().

Изменить:

setlocale(LC_ALL,'es_ES.UTF-8');

Для того, чтобы:

setlocale(LC_ALL,'es_ES');

Выход:

Array ( [ar] => árabe [ko] => coreano [es] => español [fr] => francés ) 
Error: User Rate Limit Exceededecho mb_internal_encoding();Error: User Rate Limit Exceededmb_internal_encoding("UTF-8");Error: User Rate Limit Exceeded.htaccessError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Andres SK
Error: User Rate Limit Exceededphptester.netError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Andres SK

Похожие вопросы