natcasesort()
Guía completa sobre la función natcasesort() en PHP: ordenamiento natural sin distinción de mayúsculas, sintaxis, ejemplos y diferencias con natsort().
Introducción
natcasesort() ordena un array usando un algoritmo de orden natural con una comparación sin distinción de mayúsculas y minúsculas. El "orden natural" significa que ordena las cadenas como lo haría una persona — así, img10 aparece después de img2, no antes como haría un ordenamiento alfabético convencional.
Esta página explica qué es el ordenamiento natural, en qué se diferencia natcasesort() de natsort() y sort(), y los aspectos a tener en cuenta con las claves y los valores de retorno.
Sintaxis
natcasesort(array &$array): boolRecibe el array por referencia, lo ordena en el lugar y devuelve true en caso de éxito. No es necesario reasignar el resultado — el array que se pasa se modifica directamente.
| Detalle | Comportamiento |
|---|---|
| Ordena | En el lugar (por referencia) |
| Claves | Preservadas — los pares clave/valor permanecen vinculados |
| Orden | Ascendente, natural, sin distinción de mayúsculas/minúsculas |
| Devuelve | bool (true en caso de éxito) |
Por qué importa el orden natural
Un ordenamiento alfabético convencional compara las cadenas carácter por carácter, por lo que "img10" queda antes que "img2" porque 1 es menor que 2. Rara vez es lo que una persona espera cuando los nombres de archivo o las etiquetas contienen números. El orden natural trata las secuencias de dígitos como números, dando el resultado más intuitivo para los humanos.
Ejemplo básico
Salida:
Array
(
[3] => Boston
[2] => Chicago
[1] => Los Angeles
[0] => New York
[4] => San Francisco
)Observe que las claves (3, 2, 1, 0, 4) no se renumeran — cada valor conserva su clave original. Si necesita que las claves se reinicien a 0, 1, 2…, use sort() en su lugar, o procese el resultado con array_values().
natcasesort() vs natsort() vs sort()
La diferencia entre estas tres funciones se aprecia mejor con cadenas de mayúsculas y minúsculas mezcladas que contienen números:
<?php
$files = array("IMG10.png", "img12.png", "img2.png", "IMG1.png", "img10.png");
$a = $files;
natcasesort($a); // natural + case-insensitive
print_r($a);Salida:
Array
(
[3] => IMG1.png
[2] => img2.png
[0] => IMG10.png
[4] => img10.png
[1] => img12.png
)Con natsort() (con distinción de mayúsculas) los mismos datos se ordenan de manera diferente, porque las letras mayúsculas se comparan con un valor menor que las minúsculas — por eso IMG10 queda antes que img2:
Array
(
[3] => IMG1.png
[0] => IMG10.png
[2] => img2.png
[4] => img10.png
[1] => img12.png
)Y sort() (convencional, no natural) reindexa las claves y coloca img10/img12 antes que img2:
Array
(
[0] => IMG1.png
[1] => IMG10.png
[2] => img10.png
[3] => img12.png
[4] => img2.png
)Use natcasesort() cuando el orden deba coincidir con la intuición humana y cuando el uso de mayúsculas deba ignorarse — por ejemplo, al listar nombres de archivo subidos por usuarios donde alguien pudo haber escrito IMG o img.
Aspectos a tener en cuenta
- Devuelve un bool, no el array ordenado.
$sorted = natcasesort($arr);asigna a$sortedel valortrue, no sus datos. Los datos están en$arr. - Las claves se preservan. Esto rompe el código que asume claves con base en
0posteriormente. Envuelva conarray_values($arr)si necesita una lista limpia. - Los valores no-string se comparan como cadenas. Los números, booleanos, etc. se convierten a cadenas antes de la comparación.
Funciones relacionadas
natsort()— orden natural, con distinción de mayúsculas.sort()— ordenamiento ascendente convencional, reindexa las claves.asort()— ordenamiento ascendente que preserva las claves (no natural).usort()— ordenamiento con su propio callback de comparación.
Disponible desde PHP 4.0.0.