usort

(PHP 4, PHP 5)

usortTrie un tableau en utilisant une fonction de comparaison

Description

bool usort ( array &$array , callable $cmp_function )

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 éléments sont égaux, au sens de la fonction cmp_function, leur ordre relatif sera indé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.

cmp_function

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.

int callback ( mixed $a, mixed $b )
Attention

Le 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.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
4.1.0 Un nouvel algorithme est introduit. Le paramètre cmp_function ne conserve pas l'ordre original des éléments considérés comme égaux.

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";
}
?>
<?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";
}
?>
<?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";
}
?>
<?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

LoadingChargement en cours