Algo que nos puede suceder a la hora de ordenar los valores almacenados en un array, es que si estos valores contienen números, al ordenarlo se nos muestra por ejemplo el 10 delante del 2. Esto sucede por que no ordenamos nuestro array de manera natural. Por ejemplo:
$array = array('img1.png', 'img2.png', img10.png', 'img20.png'); asort($array); var_dump($array); /* Devuelve array(4) { [0] => string(10) "img1.png" [2] => string(11) "img10.png" [1] => string(10) "img2.png" [3] => string(11) "img20.png" } */
La función asort ordena los valores del array manteniendo sus indices, tal como vemos en el resultado, y nos ordena los valores respecto al carácter. Esta función acepta otro parámetro llamado sort_flag con el cual podemos especificar que tipo de ordenación queremos. Si lo que queremos es que nos ordene de manera natural tenemos que usar la flag SORT_NATURAL
$array = array('img1.png', 'img2.png', img10.png', 'img20.png'); asort($array, SORT_NATURAL); var_dump($array); /* Devuelve array(4) { [0] => string(10) "img1.png" [1] => string(10) "img2.png" [2] => string(11) "img10.png" [3] => string(11) "img20.png" } */
Ahora podemos ver que nuestra array esta ordenada de una manera natural, es decir, el 10 viene detrás del 2.
Otra función, la cual podríamos considerarla como un alias de la anterior es natsort nos ordena de una manera natural directamente.
$array = array('img1.png', 'img2.png', img10.png', 'img20.png'); natsort($array,); var_dump($array); /* Devuelve array(4) { [0] => string(10) "img1.png" [1] => string(10) "img2.png" [2] => string(11) "img10.png" [3] => string(11) "img20.png" } */