usort
(PHP 4, PHP 5, PHP 7)
usort — Trie un tableau en utilisant une fonction de comparaison
Description
usort() va trier le tableau array
avec ses valeurs, en utilisant une fonction définie par l'utilisateur.
Si un tableau doit être trié avec un critère complexe, il est préférable
d'utiliser cette fonction.
Note:
Si deux membres se comparent comme égaux, leur ordre relatif dans le tableau trié n'est pas défini.
Note: Cette fonction assigne de nouvelles clés pour les éléments du paramètre
array
. Elle effacera toutes les clés existantes que vous aviez pu assigner, plutôt que de les trier.
Liste de paramètres
-
array
-
Le tableau d'entrée.
-
value_compare_func
-
La fonction de comparaison doit retourner un entier inférieur à, égal à, ou supérieur à 0 si le premier argument est considéré comme, respectivement, inférieur à, égal à, ou supérieur au second. Notez qu'avant PHP 7.0.0, cet entier devait être dans l'intervalle -2147483648 à 2147483647
AttentionLe fait de retourner des valeurs non entières depuis la fonction de comparaison, comme des valeurs de type nombre décimal fera que l'intervalle sera transtypé en entier en se basant sur la valeur retournée par la fonction de rappel. Aussi des valeurs comme 0.99 et 0.1 sera toutes les deux transformées en la valeur 0, et leur comparaison sera égale.
Exemples
Exemple #1 Exemple avec 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 $key => $value) {
echo "$key: $value\n";
}
?>
L'exemple ci-dessus va afficher :
0: 1 1: 2 2: 3 3: 5 4: 6
Note:
Évidemment dans ce cas trivial, sort() serait plus approprié.
Exemple #2 Tri avec usort() sur un tableau multidimensionnel
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
Lors du tri de tableau multidimensionnel, $a et $b contiennent des références sur le premier élément du tableau.
L'exemple ci-dessus va afficher :
$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons
Exemple #3 Tri avec usort() sur un objet
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Ceci est une fonction de comparaison statique */
static function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
echo $item->name . "\n";
}
?>
L'exemple ci-dessus va afficher :
b c d
Exemple #4 Exemple avec usort() en utilisant une closure pour trier un tableau multi-dimensionnel
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
L'exemple ci-dessus va afficher :
y, a x, b z, c
Voir aussi
- uasort() - Trie un tableau en utilisant une fonction de rappel
- Les fonctions de tri des tableaux
Version en cache
22/11/2024 10:34:57 Cette version de la page est en cache (à la date du 22/11/2024 10:34:57) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-usort.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.