Ordenación de arrays

PHP dispone de numerosas funciones para ordenar arrays, y esta sección del manual va a ayudar a comprenderlas.

Las diferencias principales son:

  • Algunos de los ordenamientos de array están basados en las claves, mientras que otros están basados en los valores: $array['clave'] = 'valor';
  • Algunos ordenamientos mantienen la correlación entre las claves y los valores, y otros no, lo que significa que las claves suelen ser reasignadas numéricamente (0,1,2 ...)
  • El orden de la ordenación puede ser: alfabético, ascendente, descendente, numérico, natural, aleatorio, o definido por el usuario.
  • Nota: todas estas funciones de ordenación trabajan sobre el array mismo, a diferencia de la práctica normal que sería devolver el array ordenado.
  • Si una de estas funciones de ordenación evalúa 2 miembros como iguales, entonces conservan el orden original. Anterior a PHP 8.0.0, su orden era indefinido (la ordenación no era estable).

Atributos de funciones de ordenación
Nombre de la función Ordenación por Asociación clave-valor Orden de ordenación Funciones asociadas
array_multisort() valor claves string sí, claves int no primer array, o bien opciones de ordenación array_walk()
asort() valor ascendente arsort()
arsort() valor descendente asort()
krsort() clave descendente ksort()
ksort() clave ascendente asort()
natcasesort() valor natural, insensible a la casilla natsort()
natsort() valor natural natcasesort()
rsort() valor no descendente sort()
shuffle() valor no aleatorio array_rand()
sort() valor no ascendente rsort()
uasort() valor Definido por una función de usuario uksort()
uksort() clave Definido por una función de usuario uasort()
usort() valor no Definido por una función de usuario uasort()

add a note

User Contributed Notes 2 notes

up
142
"Matthew Rice"
12 years ago
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.

The following code:

<?php

function usortTest($a, $b) {
var_dump($a);
var_dump($b);
return -
1;
}

$test = array('val1');
usort($test, "usortTest");

$test2 = array('val2', 'val3');
usort($test2, "usortTest");

?>

Will output:

string(4) "val3"
string(4) "val2"

The first array doesn't get sent to the function.

Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.
up
24
oculiz at gmail dot com
14 years ago
Another way to do a case case-insensitive sort by key would simply be:

<?php
uksort
($array, 'strcasecmp');
?>

Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
To Top