W3docs

Ordenación de Arrays

Aprende a ordenar arrays en PHP con sort(), rsort(), asort(), ksort(), natsort() y usort(). Guía completa con ejemplos prácticos.

Introducción a la ordenación de arrays en PHP

Un array en PHP es una colección de elementos almacenados y a los que se accede mediante un índice (una posición numérica) o una clave (una etiqueta). Ordenar significa reorganizar esos elementos en un orden definido — ascendente, descendente, por valor, por clave o según tu propia regla.

Esta página cubre las funciones de ordenación integradas de PHP, el comportamiento de cada una y — igualmente importante — cuál elegir dependiendo de si te importan las claves, los valores o un orden personalizado.

Diferencias entre las funciones de ordenación

Dos preguntas determinan qué función necesitas:

  1. ¿Ordenar por valor o por clave? Las listas simples (arrays indexados) ordenan por valor; los arrays asociativos pueden ordenar por cualquiera de los dos.
  2. ¿Mantener la asociación clave→valor? sort()/rsort() descartan las claves originales y reindexan desde 0. La familia a* y k* preserva la asociación.
FunciónOrdena porOrden¿Mantiene claves?
sort()valorascendenteno (reindexado)
rsort()valordescendenteno (reindexado)
asort()valorascendente
arsort()valordescendente
ksort()claveascendente
krsort()clavedescendente
usort()valor (personalizado)tu reglano (reindexado)
uasort()valor (personalizado)tu regla
uksort()clave (personalizado)tu regla

Todas estas funciones ordenan el array en el lugar (mutan la variable que les pasas) y devuelven true en caso de éxito en lugar de un nuevo array — un punto de confusión frecuente para los principiantes.

Ordenar arrays en orden ascendente

La función sort() ordena un array en orden ascendente: las cadenas alfabéticamente, los números numéricamente. Modifica el array original en el lugar y lo reindexia desde 0, por lo que se pierden las claves originales. Evita mezclar tipos de datos en un mismo array, ya que las comparaciones entre cadenas y números, por ejemplo, pueden producir resultados sorprendentes.

$fruits = ['lemon', 'orange', 'banana', 'apple'];
sort($fruits);
print_r($fruits);
// Output: Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )

Ordenar arrays en orden descendente

La función rsort() es la inversa de sort() — ordena los elementos de mayor a menor. Al igual que sort(), actúa en el lugar y reindexia el array.

$numbers = [5, 2, 9, 1, 7];
rsort($numbers);
print_r($numbers);
// Output: Array ( [0] => 9 [1] => 7 [2] => 5 [3] => 2 [4] => 1 )

Ordenar arrays asociativos por valor

Cuando las claves tienen significado (nombres, IDs, etiquetas), usa las funciones a* para que los pares clave→valor permanezcan juntos. La función asort() ordena por valor en orden ascendente; arsort() hace lo mismo en orden descendente.

$ages = ['Peter' => 35, 'John' => 28, 'Mary' => 32];
asort($ages);
print_r($ages);
// Output: Array ( [John] => 28 [Mary] => 32 [Peter] => 35 )

Observa que cada nombre permanece vinculado a su edad — esa es la diferencia respecto a sort(), que descartaría los nombres.

Ordenar arrays asociativos por clave

La función ksort() ordena por clave en orden ascendente manteniendo cada clave ligada a su valor; krsort() ordena por clave en orden descendente.

$colors = ['red' => '#FF0000', 'blue' => '#0000FF', 'green' => '#008000'];
ksort($colors);
print_r($colors);
// Output: Array ( [blue] => #0000FF [green] => #008000 [red] => #FF0000 )

Ordenación de orden natural

Una ordenación de cadenas normal compara carácter por carácter, por lo que 'img10' se ordena antes que 'img2' (porque '1' < '2'). La función natsort() utiliza un algoritmo de "orden natural" que compara los números incrustados como números — de la misma forma en que un humano ordenaría nombres de archivos. Preserva las claves.

$files = ['img12.png', 'img10.png', 'img2.png', 'img1.png'];
natsort($files);
print_r($files);
// Output: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

Usa natcasesort() para el mismo comportamiento ignorando mayúsculas y minúsculas.

Ordenación personalizada con usort()

Cuando los órdenes integrados no son suficientes — para ordenar objetos, arrays multidimensionales o por un valor derivado — usort() te permite suministrar tu propia función de comparación. El callback recibe dos elementos y debe devolver un número negativo, 0, o un número positivo dependiendo de si el primero debe ir antes, igual o después que el segundo.

$people = [
    ['name' => 'Mary', 'age' => 32],
    ['name' => 'Peter', 'age' => 35],
    ['name' => 'John', 'age' => 28],
];

usort($people, function ($a, $b) {
    return $a['age'] <=> $b['age']; // spaceship operator: ascending by age
});

foreach ($people as $person) {
    echo $person['name'] . ': ' . $person['age'] . "\n";
}
// Output:
// John: 28
// Mary: 32
// Peter: 35

El operador "nave espacial" <=> devuelve exactamente el -1 / 0 / 1 que el callback necesita, lo que lo convierte en la opción idiomática aquí. Si necesitas conservar las claves, usa uasort(); para ordenar por una regla de clave personalizada, usa uksort().

Elegir la función correcta

  • Lista simple, sin importar las claves → sort() / rsort().
  • Array asociativo, ordenar por valor, mantener claves → asort() / arsort().
  • Array asociativo, ordenar por clave → ksort() / krsort().
  • Nombres de archivos o cadenas similares a versiones → natsort() / natcasesort().
  • Objetos, arrays anidados o cualquier regla personalizada → usort() / uasort() / uksort().

Si solo necesitas invertir el orden existente sin reordenar, array_reverse() es más eficiente que una ordenación completa. Para ordenar múltiples arrays juntos o por múltiples columnas, consulta array_multisort().

Conclusión

PHP incluye un conjunto completo de herramientas para ordenar arrays, y la elección correcta depende de dos preguntas: ¿estás ordenando por valor o por clave, y necesitas mantener las claves vinculadas? sort() y rsort() gestionan listas simples, la familia a*/k* gestiona datos asociativos, natsort() gestiona el orden legible por humanos y la familia u* gestiona cualquier caso personalizado. Recuerda que todas estas funciones ordenan en el lugar y devuelven un boolean — no un nuevo array.

Práctica

Práctica
¿Cuáles de las siguientes son funciones de ordenación integradas válidas en PHP?
¿Cuáles de las siguientes son funciones de ordenación integradas válidas en PHP?
Was this page helpful?