usort
(PHP 3 >= 3.0.3, PHP 4, PHP 5)
usort --
Ordena una matriz por sus valores usando una función de
comparación definida por el usuario
Descripción
bool
usort ( array &matriz, callback funcion_comp )
Esta función ordenará una matriz por sus valores
usando una función de comparación definida por el
usuario. Si la matriz que desea ordenar necesita ser ordenada
mediante ciertos criterios especiales, es buena idea usar esta
función.
La función de comparación debe devolver un entero
menor que, igual, o mayor que cero si el primer argumento es
considerado menor, igual, o mayor que el segundo,
respectivamente.
Nota:
Si dos miembros son comparados como iguales, su orden en la
matriz resultante es indefinido. Hasta PHP 4.0.6, las funciones
definidas por el usuario mantenían el orden original
para esos elementos, pero con el nuevo algoritmo de
ordenamiento introducido en 4.1.0 este ya no es el caso, ya que
no hay forma de hacerlo de manera eficiente.
Devuelve TRUE si todo se
llevó a cabo correctamente, FALSE en caso
de fallo.
Ejemplo 1. Ejemplo de usort()
<?php function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; }
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $clave => $valor) { echo "$clave: $valor\n"; } ?>
|
El resultado del ejemplo seria: |
Nota:
Obviamente en este ejemplo trivial, la función
sort() sería más apropiada.
Ejemplo 2.
Ejemplo de usort() usando una matriz
multi-dimensional
<?php function cmp($a, $b) { return strcmp($a["fruta"], $b["fruta"]); }
$frutas[0]["fruta"] = "limones"; $frutas[1]["fruta"] = "bananos"; $frutas[2]["fruta"] = "granadillas";
usort($frutas, "cmp");
while (list($clave, $valor) = each($frutas)) { echo "\$frutas[$clave]: " . $valor["fruta"] . "\n"; } ?>
|
Cuando se ordena una matriz multi-dimensional,
$a y $b contienen
referencias al primer índice de la matriz.
El resultado del ejemplo seria: $frutas[0]: bananos
$frutas[1]: granadillas
$frutas[2]: limones |
|
Ejemplo 3.
Ejemplo de usort() usando una función
miembro de un objeto
<?php class ObjPrueba { var $nombre;
function ObjPrueba($nombre) { $this->nombre = $nombre; }
/* Esta es la funcion estatica de comparacion: */ function cmp_obj($a, $b) { $al = strtolower($a->nombre); $bl = strtolower($b->nombre); if ($al == $bl) { return 0; } return ($al > $bl) ? +1 : -1; } }
$a[] = new ObjPrueba("c"); $a[] = new ObjPrueba("b"); $a[] = new ObjPrueba("d");
usort($a, array("ObjPrueba", "cmp_obj"));
foreach ($a as $item) { echo $item->nombre . "\n"; } ?>
|
El resultado del ejemplo seria: |
Vea también uasort(),
uksort(), sort(),
asort(),
arsort(),ksort(),
natsort(), and rsort().