(PHP 4, PHP 5)
usort — Ordena un array según sus valores usando una función de comparación definida por el usuario
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.
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.
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.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
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.
|
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 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 : -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($array, build_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