(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.
Note:
Si dos miembros se comparan como iguales, su orden en el array ordenado es indefinido.
Note: Esta función asigna nuevas clave a los elemenos del array. Eliminará cualquier clave existenteque haya sido asignada, en lugar de reordenar las claves.
El array de entrada.
La función de comparación debe devolver un valor de tipo integer menor que, igual, o mayor que cero si el primer argumento se considera, respectivamente, menor que, igual, o mayor que el segundo.
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. |
Example #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
Note:
Obviamente, en este caso tan trivial, la función sort() sería más apropiada.
Example #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
Example #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