2015-08-20 2 views
2

У меня есть некоторые проблемы с сортировкой массива.Utf8 Sort Array

Список

0 => string 'Australien' (length=10) 
1 => string 'Belgien' (length=7) 
2 => string 'Botswana' (length=8) 
3 => string 'Brasilien' (length=9) 
4 => string 'Bulgarien' (length=9) 
5 => string 'Burma' (length=5) 
6 => string 'China' (length=5) 
7 => string 'Costa Rica' (length=10) 
73 => string 'Ägypten' (length=8) 

Но Ägypten должен быть после Australien. Я уже пробовал с классом Collator, но наш клиент не установит расширение.

+0

Есть ли у вас какие-либо другие названия, такие как «Ägypten»? –

+1

Я уверен, что эта ссылка вам поможет: http://stackoverflow.com/questions/7929796/how-can-i-sort-a-utf-8-string-in-php –

+1

Вы не прочитали весь мой вопрос? Я уже пробовал Collator. И да Его более одного. – noaaah

ответ

2

Вы можете использовать setlocale вместе с первым параметром LC_COLLATE и второй локали с en_US.utf8 и просто сортировать, используя usort вместе с strcoll попробовать, как

setlocale(LC_COLLATE, 'en_US.utf8'); 
$array = array('Australien','Belgien','Botswana','Brasilien','Bulgarien','Burma','China','Costa Rica','Ägypten'); 
usort($array, 'strcoll'); 
print_r($array); 

Demo

+0

В этом случае язык должен быть, вероятно, 'de_DE.UTF-8', но да, это * должно * работать. – deceze

+0

Спасибо за повторение. Я обновлю его, но он будет генерировать то же, что и в показанной OP [Проверить это] (https://eval.in/419493) @deceze –

+0

Его не будет работать ... '\t \t \t setlocale (LC_COLLATE, 'de_DE.UTF-8'); \t \t \t $ this-> utf8_encode_deep ($ list); \t \t \t usort ($ list ['continents'], 'strcoll'); \t \t \t \t \t умереть (var_dump ($ список [ 'страны'])); ' – noaaah