usort

usort -- Sortuj tablicę według wartości korzystając ze zdefiniowanej przez użytkownika funkcji porównującej

Opis

void usort ( array tablica, callback funkcja_por)

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 .

Notatka : 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 .



Przykład 1 . Przykład użycia usort( )










Powyższy przykład wyświetli :


























Notatka : Oczywiście w prostszych przypadkach lepiej jest skorzystać z funkcji rsort( ) .

Przykład 2 . Przykład użycia usort( ) do sortowania wielowymiarowych tablic

 
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 .

Ten przykład wyświetli :

 
$owoce[

 
0]

 
:

 
cytryny

 
$owoce[1]

 
:

 
jabłka

 
$owoce[2

 
]

 
:

 
winogrona





Przykład 3 . Przykład użycia usort( ) używając funkcji składowej obiektu

 
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"

 
;

 
}





Ten przykład wyświetli :






Patrz także : uasort( ) , uksort( ) , sort( ) , asort( ) , arsort( ) , ksort( ) , natsort( ) i rsort( ) .