¿Es posible ordenar una matriz con caracteres Unicode/UTF-8 en PHP utilizando un algoritmo de orden natural? Por ejemplo (el orden en esta matriz se ordena correctamente):Algoritmo de clasificación natural en PHP con soporte para Unicode?
$array = array
(
0 => 'Agile',
1 => 'Ágile',
2 => 'Àgile',
3 => 'Âgile',
4 => 'Ägile',
5 => 'Ãgile',
6 => 'Test',
);
Si trato con asort ($ array) me sale el siguiente resultado:
Array
(
[0] => Agile
[6] => Test
[2] => Àgile
[1] => Ágile
[3] => Âgile
[5] => Ãgile
[4] => Ägile
)
Y el uso de natsort ($ array):
Array
(
[2] => Àgile
[1] => Ágile
[3] => Âgile
[5] => Ãgile
[4] => Ägile
[0] => Agile
[6] => Test
)
¿Cómo puedo implementar una función que devuelve el orden resultado correcto (0, 1, 2, 3, 4, 5, 6) bajo PHP 5? Todas las funciones de cadenas de bytes múltiples (mbstring, iconv, ...) están disponibles en mi sistema.
EDITAR: Quiero natsort() los valores, no las claves: la única razón por la que estoy definiendo explícitamente las claves (y usar asort() en lugar de ordenar()) es facilitar el trabajo de encontrar donde la clasificación de valores Unicode salió mal.
Parece que lo que realmente necesita aquí es el Algoritmo de intercalación Unicode (UCA). Tengo una demostración de Perl de eso [en esta respuesta] (http://stackoverflow.com/questions/1097908/how-do-i-sort-unicode-strings-alphabetically-in-python/5024116#5024116), donde proporcionar una versión invocable de shell para quienes no tengan una biblioteca adecuada para llamar. Quizás eso también podría ayudar aquí. – tchrist
@tchrist: UCA es lo que estoy buscando, voy a echar un vistazo más de cerca a su respuesta en un momento, ¡gracias por el aviso! ;) –