I currentyl не имеет понятия о том, как отсортировать массив, который содержит кодированные строки UTF-8 в PHP. Массив поставляется с сервера LDAP, поэтому сортировка по базе данных (без проблем) не является решением. Ниже не работает на моей машине развития окна (хотя я думаю, что это должно быть по крайней мере, одно из возможных решений):Как отсортировать массив строк UTF-8?
$array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
$oldLocal=setlocale(LC_COLLATE, "0");
var_dump(setlocale(LC_COLLATE, 'German_Germany.65001'));
usort($array, 'strcoll');
var_dump(setlocale(LC_COLLATE, $oldLocal));
var_dump($array);
Выход:
string(20) "German_Germany.65001"
string(1) "C"
array(6) {
[0]=>
string(6) "Birnen"
[1]=>
string(9) "Ungetiere"
[2]=>
string(6) "Äpfel"
[3]=>
string(5) "Apfel"
[4]=>
string(9) "Ungetüme"
[5]=>
string(11) "Österreich"
}
Это полная чушь , Используя 1252 как кодовая для setlocale()
дает другой выход, но все еще явно неправильны один:
string(19) "German_Germany.1252"
string(1) "C"
array(6) {
[0]=>
string(11) "Österreich"
[1]=>
string(6) "Äpfel"
[2]=>
string(5) "Apfel"
[3]=>
string(6) "Birnen"
[4]=>
string(9) "Ungetüme"
[5]=>
string(9) "Ungetiere"
}
Есть ли способ, чтобы отсортировать массив с UTF-8 строк локали известно?
Только что отметил, что это похоже на проблему с PHP на Windows, поскольку тот же фрагмент с , используемый в качестве языкового стандарта, работает на машине Linux. Тем не менее решение этой Windows, конкретной проблемы было бы неплохо ...
Здесь все работает отлично (см. Мой пост ниже), вы уверены, что это не имеет никакого отношения к конфигурации машины? – Huppie 2008-09-23 11:26:19
Обратите внимание, что порядок сортировки зависит от языка. На немецком языке A и Ä иногда могут быть отсортированы так, как если бы они были одним и тем же письмом, а иногда Ä можно сортировать так, как это было на самом деле «AE». Шведский, однако, Ä приходит в конце алфавита. Carl – 2008-09-24 08:16:04
Вы правы - это свойство уважается, используя правильную локаль и strcoll() для сортировки. Проблема здесь в том, что на Windows strcoll(), похоже, проблема, когда входные строки кодируются UTF-8. – 2008-09-24 08:57:12