Sortuje tablicÄ™ wedÅ‚ug wartoÅ›ci korzystajÄ…c ze zdefiniowanej przez użytkownika funkcji porównujÄ…cej.
Funkcja ta posortuje tablicÄ™ wedÅ‚ug jej wartoÅ›ci korzystajÄ…c z podanej przez użytkownika funkcji porównujÄ…cej. JeÅ›li chcesz posortować tablicÄ™ wedÅ‚ug skomplikowanych kryteriów, to powinieneÅ› użyć tej funkcji.
Funkcja porównujÄ…ca musi zwracać liczbÄ™ caÅ‚kowitÄ… mniejszÄ…, równÄ… lub wiÄ™kszÄ… od zera jeÅ›li pierwszy argument jest odpowiednio mniejszy, równy lub wiÄ™kszy niż drugi.
Informacja: JeÅ›li wynikiem porównania dwóch elementów tablicy jest równość, ich kolejność w posortowanej tablicy pozostaje niezdefiniowana. Od PHP 4.0.6 funkcje zdefiniowane przez użytkownika mogÅ‚y utrzymywać poczÄ…tkowÄ… kolejność tych elementów, lecz nowy algorytm sortowania wprowadzony w PHP 4.1.0 czyni to uniemożliwym i nie ma wydajnego sposobu na rozwiÄ…zanie tego problemu.
Informacja: Ta funkcja przypisuje nowe klucze dla elementów argumentu tablica . Wszystkie istniejÄ…ce klucze zostanÄ… usuniÄ™te.
Zwraca TRUE w przypadku powodzenia, FALSE w przypadku błędu.
Kompatybilność: PHP4, PHP5.
Listing
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 => $val) {
echo "$key: $value\n";
}
?>
//Powyższy przykład wyświetli:
0: 6
1: 5
2: 3
3: 2
4: 1
//#2 Przykład użycia usort() do sortowania wielowymiarowych tablic
<?php
function cmp($a, $b)
{
return strcmp($a["owoc"], $b["owoc"]);
}
$owoce[0]["owoc"] = "cytryny";
$owoce[1]["owoc"] = "jabłka";
$owoce[2]["owoc"] = "winogrona";
usort($owoce, "cmp");
while (list($key, $value) = each($owoce)) {
echo "\$owoce[$key]: " . $value["owoc"] . "\n";
}
//SortujÄ…c tablicÄ™ wielowymiarowÄ…, $a i $b zawierajÄ… referencjÄ™ do pierwszego indeksu tablicy.
//Powyższy przykład wyświetli:
$owoce[0]: cytryny
$owoce[1]: jabłka
$owoce[2]: winogrona
//#3 Przykład użycia usort() używając funkcji składowej obiektu
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Statyczna funkcja porównująca */
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");
uasort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
print $item->name . "\n";
}
//Powyższy przykład wyświetli:
b
c
d
Ranga: Administrator serwisu Punktów: 38473

