Domina cómo ordenar un array en PHP. Tus mejores armas son las funciones nativas del lenguaje PHP, que son rápidas y precisas como una katana.
En PHP, un array es una estructura de datos clave que permite almacenar un conjunto ordenado de valores bajo el principio clave => valor. La cantidad de herramientas para trabajar con arrays es impresionante: ¡solo para la ordenación existen 13 funciones nativas! En esta guía, te demostraré cómo utilizarlas para organizar tu información justo como la necesitas.
Para ordenar un array en PHP, puedes usar más de 13 funciones nativas. Las más comunes son
sort()para orden ascendente,rsort()para descendente,asort()para ordenar por valor manteniendo las claves,ksort()para php ordenar array por key, yusort()para crear una lógica de ordenación personalizada.
Principales Criterios para Ordenar un Array en PHP
Todas las funciones de PHP para la ordenación de arrays se construyen a partir de cuatro criterios principales:
- Tipo de ordenación: por clave o por valor.
- Orden de clasificación: ascendente, descendente, natural, definido por el usuario, etc.
- Manejo de claves: con o sin preservación de la asociación.
- Opciones de refinamiento: en siete de estas funciones, se puede especificar un método de ordenación preferido y parámetros adicionales (“flags”).
A continuación, se presentan las funciones que permiten realizar estas operaciones:
Funciones para Ordenar Arrays en PHP
| Función | Descripción | Ordena por | Tipo de Orden | Mantiene Claves | Admite Flags |
|---|---|---|---|---|---|
sort() | Ordena un array en orden ascendente. | Valor | Ascendente | No | Sí |
rsort() | Ordena un array en orden descendente. | Valor | Descendente | No | Sí |
asort() | Ordena un array en orden ascendente y mantiene la asociación de claves. | Valor | Ascendente | Sí | Sí |
arsort() | Ordena un array en orden descendente y mantiene la asociación de claves. | Valor | Descendente | Sí | Sí |
ksort() | Ordena un array por clave en orden ascendente. | Clave | Ascendente | Sí | Sí |
krsort() | Ordena un array por clave en orden descendente. | Clave | Descendente | Sí | Sí |
shuffle() | Ordena los elementos de un array de forma aleatoria. | Valor | Aleatorio | No | No |
natsort() | Ordena un array usando un algoritmo de “orden natural”. | Valor | Natural | Sí | No |
natcasesort() | Ordena un array con “orden natural” sin distinguir mayúsculas/minúsculas. | Valor | Natural (ignora mayús.) | Sí | No |
usort() | Ordena un array por valor usando una función definida por el usuario. | Valor | Definido por el usuario | No | No |
uasort() | Ordena un array por valor usando una función definida por el usuario y mantiene las claves. | Valor | Definido por el usuario | Sí | No |
uksort() | Ordena un array por clave usando una función definida por el usuario. | Clave | Definido por el usuario | Sí | No |
array_multisort() | Ordena múltiples arrays o arrays multidimensionales. | Valor | Flexible (asc/desc) | Sí (solo claves string) | Sí |
Cada función tiene un nombre que indica el tipo de ordenación y finaliza con paréntesis. A primera vista, estos nombres pueden no ser muy descriptivos, por lo que para empezar es mejor seleccionar una función para una tarea específica, consultando la tabla en el sitio web oficial. Es fácil recordar que las funciones que contienen la letra “k” ordenan los arrays por sus claves.
Dependiendo de la función seleccionada, dentro de los paréntesis se especifica el array o varios arrays a ordenar, y a continuación pueden ir las opciones (flags):
SORT_REGULAR– compara los elementos en su orden normal, sin cambiar sus tipos.SORT_NUMERIC– compara los elementos como números.SORT_STRING– compara los elementos como cadenas de texto (strings).SORT_LOCALE_STRING– compara los elementos como strings, basándose en la configuración regional actual (locale).SORT_NATURAL– compara los elementos como strings en un orden natural.SORT_FLAG_CASE– se puede combinar conSORT_STRINGoSORT_NATURALpara realizar una ordenación insensible a mayúsculas y minúsculas.
A continuación, probaremos en la práctica la ordenación de arrays de diferentes maneras. Para ello, utilizaré el editor de código Notepad++ y el entorno de desarrollo XAMPP para ejecutar el código PHP en un navegador. Puedes probar este y todos los demás ejemplos directamente en un sandbox online como 3v4l.org.
En todos los ejemplos, primero mostraré el array original y luego el mismo array después de la ordenación (recuerda que la ordenación modifica el array, es decir, su resultado se preserva). Para facilitar la lectura, mostraré la salida utilizando la función echo en conjunto con implode()/print_r() o un bucle foreach.
Para mejorar la presentación, acompañaré los resultados con encabezados (títulos HTML <h2> y <h3>) y saltos de línea (elemento HTML <br>).
<?php
echo "<h1>ORDENACIÓN DE ARRAYS</h1>";
// Inicio de nuestro códigoCómo Ordenar un Array Numérico con rsort()
Crearemos un array de números y lo ordenaremos en orden descendente, del valor mayor al menor. Tomemos un ejemplo simple: un array de salarios en pesos.
$salaries = array(45000, 65000, 35000, 75000, 55000);Así se ve con la salida del resultado.
echo "<h2>Ordenación de vacantes por salarios</h2>";
$salaries = array(45000, 65000, 35000, 75000, 55000);
echo "<h3>Array original de vacantes por salarios completo, antes de ordenar</h3>";
print_r($salaries);
echo "<h3>Array de vacantes por salarios antes de ordenar –- solo valores (orden original)</h3>";
echo implode(", ", $salaries) . "<br>";Array original de vacantes por salarios completo, antes de ordenar:
Array ( [0] => 45000 [1] => 65000 [2] => 35000 [3] => 75000 [4] => 55000 )Array de vacantes por salarios antes de ordenar — solo valores (orden original):45000, 65000, 35000, 75000, 55000
Como se puede observar, los salarios dentro del array están dispuestos en un orden arbitrario, y me gustaría ver primero las vacantes más rentables. Por lo tanto, necesitamos encontrar en la tabla un método que ordene los valores en orden descendente; la función rsort() es la adecuada.
rsort($array, FLAGS);Explicación:
rsort()– nombre de la función; los parámetros se indican entre paréntesis.$array– el array a ordenar.FLAGS– opción donde se pueden especificar otras reglas de ordenación para el array (flags).
Ahora, probemos la función. En el primer paso, le pasaremos el array con los salarios, $salaries.
rsort($salaries);A continuación, escribimos el código para mostrar el resultado:
echo "<h3>Array de vacantes por salarios después de ordenar con rsort() (por valor, descendente)</h3>";
echo implode(", ", $salaries) . "<br>";Esto es lo que obtuvimos en la salida:75000, 65000, 55000, 45000, 35000
Ahora, abordemos un array de valores de texto.
Ordenar un Array Asociativo por Clave y Valor
Según The Owls Trust, existen más de doscientas especies de búhos en el mundo. Sería una buena idea crear un sitio web sobre ellos para que todos puedan aprender más. Comencemos creando un “array de búhos”.
echo "<h2>Ordenando los búhos</h2>";
$owls = array(
"tytonidae" => "Lechuzas comunes",
"tyto" => "Lechuzas",
"strigidae" => "Búhos típicos",
"otus" => "Autillos",
"bubo" => "Búhos reales",
"ketupa" => "Búhos pescadores",
"nyctea" => "Búhos nivales",
"surnia" => "Lechuzas gavilanas",
"glaucidium" => "Mochuelos",
"ninox" => "Nínox",
"athene" => "Mochuelos comunes",
"strix" => "Cárabos",
"asfo" => "Búhos chicos",
"aegolius" => "Lechuzas de Tengmalm"
);Array original de nombres de especies de búhos completo, antes de ordenar:
Array ( [tytonidae] => Lechuzas comunes [tyto] => Lechuzas [strigidae] => Búhos típicos [otus] => Autillos [bubo] => Búhos reales [ketupa] => Búhos pescadores [nyctea] => Búhos nivales [surnia] => Lechuzas gavilanas [glaucidium] => Mochuelos [ninox] => Nínox [athene] => Mochuelos comunes [strix] => Cárabos [asfo] => Búhos chicos [aegolius] => Lechuzas de Tengmalm )En este caso, las claves del array asociativo son los nombres latinos de las especies, y los valores son sus nombres en español.
Dependiendo de la tarea, podríamos necesitar diferentes vistas de los datos. De aquí surge la necesidad de utilizar varias funciones:
ksort()para ordenar un array PHP por claves (nombres latinos) alfabéticamente.asort()para ordenar array por valor php, también alfabéticamente.shuffle()para desordenar los elementos del array (aleatorización).
La sintaxis de ksort() y asort() es la misma que en el ejemplo anterior con rsort(), y con shuffle() es aún más simple: solo acepta el nombre del array.
Veamos las funciones en acción:
ksort($owls);
echo"<h3>Array de búhos después de ordenar con ksort() (por clave, alfabético, ascendente)</h3>";
print_r($owls);
asort($owls);
echo "<h3>Nombres de especies de búhos después de ordenar con asort() (por valor, alfabético, ascendente)</h3>";
echo implode(", ", $owls) . "<br>";
shuffle($owls);
echo "<h3>Nombres de especies de búhos después de usar shuffle() (orden aleatorio)</h3>";
echo implode(", ", $owls) . "<br>";Nota: Es importante destacar que shuffle() no es una función de ordenación, sino de aleatorización. Su propósito es barajar los elementos. Además, al aplicarla a un array asociativo como $owls, las claves originales ('tytonidae', 'tyto', etc.) se pierden y son reemplazadas por nuevos índices numéricos.
Array de búhos después de ordenar con ksort() (por clave, alfabético, ascendente):
Array
(
[aegolius] => Lechuzas de Tengmalm
[asfo] => Búhos chicos
[athene] => Mochuelos comunes
[bubo] => Búhos reales
[glaucidium] => Mochuelos
[ketupa] => Búhos pescadores
[ninox] => Nínox
[nyctea] => Búhos nivales
[otus] => Autillos
[strigidae] => Búhos típicos
[strix] => Cárabos
[surnia] => Lechuzas gavilanas
[tyto] => Lechuzas
[tytonidae] => Lechuzas comunes
)Nombres de especies de búhos después de ordenar con asort() (por valor, alfabético, ascendente):
Autillos, Búhos chicos, Búhos nivales, Búhos pescadores, Búhos reales, Búhos típicos, Cárabos, Lechuzas, Lechuzas comunes, Lechuzas de Tengmalm, Lechuzas gavilanas, Mochuelos, Mochuelos comunes, NínoxNombres de especies de búhos después de usar shuffle() (orden aleatorio):
Lechuzas, Búhos pescadores, Búhos nivales, Mochuelos, Autillos, Lechuzas comunes, Lechuzas de Tengmalm, Lechuzas gavilanas, Búhos chicos, Búhos reales, Cárabos, Búhos típicos, Nínox, Mochuelos comunesLos búhos están en su lugar, y avanzamos hacia una ordenación que simula la lógica humana.
Ordenación Natural en PHP con natsort()
Supongamos que tenemos una lista de suscriptores de nuestro grupo en uno de los formatos posibles: enlaces con un id del tipo portal.com/idXXX.
echo "<h2>Ordenando enlaces a páginas de «Portal» con natsort()</h2>";
$pages = array("portal.com/id30000", "portal.com/id10000", "portal.com/id20000");Sería conveniente organizar los registros en orden ascendente de id, pero hay un detalle: los elementos del array son valores de tipo string. Para resolver esta tarea, utilizaremos la función de ordenación natural natsort().
natsort($array);Explicación:
natsort()– nombre de la función, que toma un único parámetro entre paréntesis.$array– el array que se debe ordenar de forma natural (como lo haría un humano).
Veamos la función en acción:
natsort($pages);
echo "<h3>Array de enlaces a páginas de «Portal» después de la ordenación natural con natsort() (por valor, ascendente)</h3>";
echo implode(", ", $pages) . "<br>";Array de enlaces a páginas de «Portal» después de la ordenación natural con natsort() (por valor, ascendente):portal.com/id10000, portal.com/id20000, portal.com/id30000
Ahora las páginas están ordenadas en un formato conveniente para trabajar.
Cómo Ordenar un Array PHP Multidimensional
Para ordenar un array multidimensional PHP, se utiliza la función array_multisort(), que permite ordenar varios arrays a la vez o un array multidimensional por una o más de sus dimensiones. Como ejemplo, tomemos un array bidimensional que consta de dos arrays: marcas de combustible y sus precios.
echo "<h2>Ordenando precios de combustible con array_multisort()</h2>";
$petrol = array(
array("1.75", "1.95", "1.81", "1.60"), // Precios
array("Gasolina 95", "Gasolina 98", "Diésel", "Gasolina 92") // Marcas
);Actualmente existe una correspondencia mutua (por ejemplo, Gasolina 92 cuesta 1.60), pero los valores en sí no están ordenados. Intentaremos usar la función array_multisort() para mostrar al usuario una lista de precios ordenada de forma ascendente.

La función array_multisort() está diseñada para ordenar un array php multidimensional. Para asegurar que los precios, que están almacenados como strings, se comparen como números reales, utilizaremos el flag SORT_NUMERIC. Esto previene errores de ordenación que podrían ocurrir con una comparación de strings estándar.
Apliquemos la función:
echo("<h3>Ordenación de marcas de combustible y precios con array_multisort() (ascendente)</h3>");
// Ordenamos el array de precios numéricamente y el array de marcas de acuerdo a ello.
array_multisort($petrol[0], SORT_NUMERIC, SORT_ASC, $petrol[1]);
echo implode(" -- ", $petrol[1]) . "<br>"; // Marcas ordenadas
echo implode(" -- ", $petrol[0]) . "<br>"; // Precios ordenadosSalida del array ordenado de marcas de combustible y precios con array_multisort() (ascendente):
Gasolina 92 -- Gasolina 95 -- Diésel -- Gasolina 98
1.60 -- 1.75 -- 1.81 -- 1.95Ahora las marcas de combustible están ordenadas por precio ascendente. Pasemos a la ordenación con reglas personalizadas.
Ordenar un Array PHP por Campo con usort()
Supongamos que una empresa tiene un portal corporativo con un listado de empleados. La base de datos contiene Nombre completo, ID interno, Cargo y Edad, y la ficha de cada empleado es un array individual dentro de un array multidimensional.
Primero, definimos nuestro array de empleados:
$employees = array(
array("ID" => 2, "Nombre" => "Fernández, Ana", "Cargo" => "Contable", "Edad" => 32),
array("ID" => 4, "Nombre" => "Pérez, Laura", "Cargo" => "Gerente", "Edad" => 31),
array("ID" => 3, "Nombre" => "Martínez, Carlos", "Cargo" => "Mensajero", "Edad" => 22),
array("ID" => 6, "Nombre" => "Romero, María", "Cargo" => "Ingeniera Senior", "Edad" => 26),
array("ID" => 5, "Nombre" => "Sánchez, David", "Cargo" => "Director", "Edad" => 40),
array("ID" => 1, "Nombre" => "García, Juan", "Cargo" => "Programador", "Edad" => 35)
);Permitiremos al usuario del portal corporativo ordenar la lista por apellido, edad y número de ID. Para esto, nos ayudará la función de ordenación definida por el usuario usort(), ideal para ordenar un array PHP por campo.
usort($array, "funcion_de_comparacion");Explicación:
usort()– nombre de la función; los parámetros se indican entre paréntesis.$array– el array a ordenar."funcion_de_comparacion"– el nombre de tu función de comparación con reglas de ordenación propias. Se declara previamente y acepta dos parámetros.
Apliquemos la función para ordenar a los empleados alfabéticamente, por edad (ascendente) y por ID (descendente).
Ordenación por Nombre:
echo "<h3>Ordenación de empleados por Nombre con usort() y strcmp (alfabético)</h3>";
function alphSort($name1, $name2) {
return strcmp($name1["Nombre"], $name2["Nombre"]);
};
usort($employees, "alphSort");
foreach ($employees as $employee) {
echo "ID " . $employee["ID"] . ", " . "<b>Nombre: " . $employee["Nombre"] . ",</b> " . "Cargo: " . $employee["Cargo"] . ", " . "Edad: " . $employee["Edad"] . "<br>";
};Salida por Nombre alfabéticamente:
ID 2, Nombre: Fernández, Ana, Cargo: Contable, Edad: 32
ID 1, Nombre: García, Juan, Cargo: Programador, Edad: 35
...Ordenación por Edad:
echo "<h3>Ordenación de empleados por Edad con usort() (ascendente)</h3>";
function ageSort($age1, $age2) {
if ($age1["Edad"] == $age2["Edad"]) {
return 0;
}
return ($age1["Edad"] < $age2["Edad"]) ? -1 : 1;
};
usort($employees, "ageSort");
foreach ($employees as $employee) {
echo "ID " . $employee["ID"] . ", " . "Nombre: " . $employee["Nombre"] . ", " . "Cargo: " . $employee["Cargo"] . ", " . "<b>Edad: " . $employee["Edad"] . "</b><br>";
};Salida por Edad:
ID 3, Nombre: Martínez, Carlos, Cargo: Mensajero, Edad: 22
ID 6, Nombre: Romero, María, Cargo: Ingeniera Senior, Edad: 26
...Ordenación por ID:
echo "<h3>Ordenación de empleados por ID con usort() (descendente)</h3>";
function idSort($id1, $id2) {
if ($id1["ID"] == $id2["ID"]) {
return 0;
}
return ($id1["ID"] < $id2["ID"]) ? 1 : -1;
};
usort($employees, "idSort");
foreach ($employees as $employee) {
echo "<b>ID " . $employee["ID"] . ",</b> " . "Nombre: " . $employee["Nombre"] . ", " . "Cargo: " . $employee["Cargo"] . ", " . "Edad: " . $employee["Edad"] . "<br>";
};
?>Salida por ID:
ID 6, Nombre: Romero, María, Cargo: Ingeniera Senior, Edad: 26
ID 5, Nombre: Sánchez, David, Cargo: Director, Edad: 40
...¿Qué Método de Ordenación Debes Usar?
He examinado los principales tipos de ordenación de arrays en PHP: numérica, alfabética, natural, multidimensional y definida por el usuario, utilizando las funciones adecuadas para cada caso.
Para un conocimiento más detallado de las funciones de ordenación de arrays en PHP, se recomienda utilizar tablas de referencia. Para una aplicación sintácticamente correcta, te aconsejo consultar la documentación oficial del lenguaje.

