Funciones de Arrays
PHP Manual

usort

(PHP 4, PHP 5)

usortOrdena un array según sus valores usando una función de comparación definida por el usuario

Descripción

bool usort ( array &$array , callable $cmp_function )

Esta función ordenará un array según sus valores usando una función de comparación definida por el usuario. Si el array que se desea ordenar necesita ser ordenado por algún criterio no trivial, debería usar esta función.

Nota:

Si dos miembros se comparan como iguales, su orden relativo en el array ordenado es indefinido.

Nota: Esta función asigna nuevas clave a los elemenos del array. Eliminará cualquier clave existenteque haya sido asignada, en lugar de reordenar las claves.

Parámetros

array

El array de entrada.

cmp_function

La función de comparación debe devolver un entero menor, igual o mayor que cero si el primer argumento se considera que sea respectivamente menor, igual o mayor que el segundo.

int callback ( mixed $a, mixed $b )
Precaución

La devolución de valores que no sean de tipo integer por parte de la función de comparación, como float, resultará en una conversión interna a integer del valor devuelto por la llamada de retorno. Así, valores como 0.99 y 0.1 serán convertidos al valor de tipo integer 0, lo cual hará que la comparación de tales valores sea igual.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
4.1.0 Se introdujo un nuevo algoritmo de ordenación. La función cmp_function no mantiene el orden original de los elementos comparadados como iguales.

Ejemplos

Ejemplo #1 Ejemplo de usort()

<?php
function cmp($a$b)
{
    if (
$a == $b) {
        return 
0;
    }
    return (
$a $b) ? -1;
}

$a = array(32561);

usort($a"cmp");

foreach (
$a as $clave => $valor) {
    echo 
"$clave$valor\n";
}
?>

El resultado del ejemplo sería:

0: 1
1: 2
2: 3
3: 5
4: 6

Nota:

Obviamente, en este caso tan trivial, la función sort() sería más apropiada.

Ejemplo #2 Ejemplo de usort() usando un array multidimensional

<?php
function cmp($a$b)
{
    return 
strcmp($a["fruta"], $b["fruta"]);
}

$frutas[0]["fruta"] = "uvas";
$frutas[1]["fruta"] = "limones";
$frutas[2]["fruta"] = "manzanas";

usort($frutas"cmp");

while (list(
$clave$valor) = each($frutas)) {
    echo 
"\$frutas[$clave]: " $valor["fruta"] . "\n";
}
?>

Cuando se ordena un array multidimensional, $a y $b contienen referencias al primer índice del array.

El resultado del ejemplo sería:

$frutas[0]: limones
$frutas[1]: manzanas
$frutas[2]: uvas

Ejemplo #3 Ejemplo de usort() usando una función miembro de un objeto

<?php
class ObjPrueba {
    var 
$nombre;

    function 
ObjPrueba($nombre)
    {
        
$this->nombre $nombre;
    }

    
/* Ésta es la función de comparación estática: */
    
static function cmp_obj($a$b)
    {
        
$al strtolower($a->nombre);
        
$bl strtolower($b->nombre);
        if (
$al == $bl) {
            return 
0;
        }
        return (
$al $bl) ? +: -1;
    }
}

$a[] = new ObjPrueba("c");
$a[] = new ObjPrueba("b");
$a[] = new ObjPrueba("d");

usort($a, array("ObjPrueba""cmp_obj"));

foreach (
$a as $elemento) {
    echo 
$elemento->nombre "\n";
}
?>

El resultado del ejemplo sería:

b
c
d

Ejemplo #4 Ejemplo de usort() usando un cierre para ordenar un array multidimensional

<?php
$array
[0] = array('clave_a' => 'z''clave_b' => 'c');
$array[1] = array('clave_a' => 'x''clave_b' => 'b');
$array[2] = array('clave_a' => 'y''clave_b' => 'a');

function 
build_sorter($clave) {
    return function (
$a$b) use ($clave) {
        return 
strnatcmp($a[$clave], $b[$clave]);
    };
}

usort($arraybuild_sorter('key_b'));

foreach (
$array as $item) {
    echo 
$item['clave_a'] . ', ' $item['clave_b'] . "\n";
}
?>

El resultado del ejemplo sería:

y, a
x, b
z, c

Ver también


Funciones de Arrays
PHP Manual