È possibile ordinare un array con caratteri Unicode/UTF-8 in PHP utilizzando un algoritmo di ordine naturale? Per esempio (l'ordine in questo array è correttamente ordinata):Algoritmo di ordinamento naturale in PHP con supporto per Unicode?
$array = array
(
0 => 'Agile',
1 => 'Ágile',
2 => 'Àgile',
3 => 'Âgile',
4 => 'Ägile',
5 => 'Ãgile',
6 => 'Test',
);
Se provo con asort ($ array) ottengo il seguente risultato:
Array
(
[0] => Agile
[6] => Test
[2] => Àgile
[1] => Ágile
[3] => Âgile
[5] => Ãgile
[4] => Ägile
)
E usando natsort ($ array):
Array
(
[2] => Àgile
[1] => Ágile
[3] => Âgile
[5] => Ãgile
[4] => Ägile
[0] => Agile
[6] => Test
)
Come posso implementare una funzione che restituisce l'ordine risultato corretto (0, 1, 2, 3, 4, 5, 6) sotto PHP 5? Tutte le funzioni stringa multi byte (mbstring, iconv, ...) sono disponibili sul mio sistema.
MODIFICA: Desidero specificare i valori (non i tasti), ma solo i nomi che definisco esplicitamente le chiavi (e utilizzare asort() anziché sort()) per facilitare il lavoro di ricerca dove l'ordinamento di valori unicode è andato storto.
Sembra proprio che quello di cui hai veramente bisogno sia l'Unicode Collation Algorithm (UCA). Ho una dimostrazione di Perl di questo [in questa risposta] (http://stackoverflow.com/questions/1097908/how-do-i-sort-unicode-strings-alphabetically-in-python/5024116#5024116), dove I fornire una versione calleble di essa per coloro che potrebbero non avere una libreria appropriata da chiamare. Forse potrebbe essere d'aiuto anche qui. – tchrist
@tchrist: UCA è quello che sto cercando, darò un'occhiata più da vicino alla tua risposta tra un po ', grazie per l'attenzione! ;) –