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(
)
.