W3docs

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): bool

Recibe 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.

DetalleComportamiento
OrdenaEn el lugar (por referencia)
ClavesPreservadas — los pares clave/valor permanecen vinculados
OrdenAscendente, natural, sin distinción de mayúsculas/minúsculas
Devuelvebool (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

php— editable, runs on the server

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 $sorted el valor true, no sus datos. Los datos están en $arr.
  • Las claves se preservan. Esto rompe el código que asume claves con base en 0 posteriormente. Envuelva con array_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.

Práctica

Práctica
¿Cuál es la función de 'natcasesort()' en PHP?
¿Cuál es la función de 'natcasesort()' en PHP?
Was this page helpful?