(PHP 4, PHP 5, PHP 7, PHP 8)
uasort — Ordena un array utilizando una función de retrollamada
Ordena array en el lugar de tal manera que la
correlación entre las claves y los valores sea conservada,
utilizando una función de comparación definida por el usuario.
Utilizado habitualmente al ordenar arrays asociativos donde el orden actual de los elementos es significativo.
Nota: Si dos miembros se comparan como iguales, mantienen su orden original. Anterior a PHP 8.0.0, su orden relativo en el array ordenado no está definido.
Nota: Reinicia el puntero interno del array al primer elemento.
arrayEl array de entrada.
callback
Retorna siempre true .
| Versión | Descripción |
|---|---|
| 8.2.0 |
El tipo de retorno es ahora true , anteriormente era bool .
|
| 8.0.0 |
Si callback espera un parámetro a ser pasado
por referencia, esta función emite ahora una E_WARNING .
|
Ejemplo #1 Ejemplo con uasort()
<?php
// Función de comparación
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
// Array a ordenar
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);
// Ordena y muestra el array resultante
uasort($array, 'cmp');
print_r($array);
?>El ejemplo anterior mostrará:
Array ( [a] => 4 [b] => 8 [c] => -1 [d] => -9 [e] => 2 [f] => 5 [g] => 3 [h] => -4 ) Array ( [d] => -9 [h] => -4 [c] => -1 [e] => 2 [g] => 3 [a] => 4 [f] => 5 [b] => 8 )
a quick reminder on the syntax if you want to use uasort in a Class or Object:
<?php
// procedural:
uasort($collection, 'my_sort_function');
// Object Oriented
uasort($collection, array($this, 'mySortMethod'));
// Objet Oriented with static method
uasort($collection, array('self', 'myStaticSortMethod'));
?>An Example using anonymous function.
Anonymous functions make some time the code easier to understand.
<?php
$fruits = array('Orange9','Orange11','Orange10','Orange6','Orange15');
uasort ( $fruits , function ($a, $b) {
return strnatcmp($a,$b); // or other function/code
}
);
print_r($fruits);
?>
returns
Array
(
[3] => Orange6
[0] => Orange9
[2] => Orange10
[1] => Orange11
[4] => Orange15
)Is it just me, or are the examples below misleading, and actually demonstrating situations that would be more appropriate for usort()?
After trying to make sense of the uasort() description, it sounds like it's more for sorting a 1D array like this:
"john" => "23ドル.12"
"tim" => "6ドル.50"
"bob" => "18ドル.54"
and getting back:
"tim" => "6ドル.50"
"bob" => "18ドル.54"
"john" => 23ドル.12"
(assuming, of course, that your sort function is lopping off the $ and evaluating as a number -- which would complicate the use of asort() ;)Since php7.0 you can replace this boilerplate
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
with the spaceship operator:
https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op
return $a <=> $b;