Beschreibung
void
usort
( array array, callback cmp_function)
Diese
Funktion
sortiert
ein
Array
nach
seinen
Werten
mittels
einer
benutzerdefinierten
Vergleichsfunktion
.
Soll
das
Array
nach
nicht
trivialen
Kriterien
sortiert
werden
,
sollten
Sie
diese
Funktion
verwenden
.
Die
Vergleichsfunktion
muss
einen
Integer
zurückgeben
,
der
kleiner
,
gleich
,
oder
größer
ist
als
NULL
,
wenn
für
das
erste
Argument
auch
angenommen
wird
,
dass
es
kleiner
,
gleich
,
oder
größer
ist
als
das
zweite
.
Anmerkung
:
Sind
zwei
Elemente
gleich
,
ist
deren
Reihenfolge
nicht
definiert
.
Bis
zu
PHP
4.0.6
würde
die
benutzerdefinierte
Funktion
die
originäre
Reihenfolge
beibehalten
,
doch
seit
der
Einführung
des
neuen
Sortieralgorhythmus
mit
4.1.0
ist
dies
nicht
mehr
der
Fall
,
da
es
keine
effiziente
Lösung
dafür
gibt
.
Dieses
Beispiel
würde
folgendes
anzeigen
:
Anmerkung
:
Offensichtlich
würde
rsort(
)
für
diesen
einfachen
Fall
besser
passen
.
Beispiel
2
.
usort(
)
Beispiel
mit
einem
mehrdimensionalen
Array
function
cmp
(
$a
,
$b
)
{
return
strcmp($a["fruit"]
,
$b["fruit"])
;
}
$fruits[0]["fruit"
]
=
"Zitronen"
;
$fruits[1]["fruit"
]
=
"Äpfel"
;
$fruits[2]["fruit"
]
=
"Trauben"
;
usort($fruits
,
"cmp")
;
while
(list
($key
,
$value
)
=
each
($fruits)
)
{
echo
"\$fruits[$key]
:
"
.
$value["fruit"
]
.
"\n"
;
}
|
|
Wird
ein
mehrdimensionales
Array
sortiert
,
enthalten
$a
und
$b
Referenzen
zu
dem
ersten
Index
des
Arrays
.
Dieses
Beispiel
würde
folgendes
anzeigen
:
$fruits[
0
]
:
Äpfel
$fruits[
1
]
:
Trauben
$fruits[
2
]
:
Zitronen
|
Beispiel
3
.
usort(
)
mit
Verwendung
einer
Member
Funktion
eines
Objektes
class
TestObj
{
var
$name
;
function
TestObj($name
)
{
$this
-
name
=
$name
;
}
/
*
Dies
ist
die
statische
Vergleichsfunktion
:
*
/
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"
;
}
|
|
Dieses
Beispiel
würde
folgendes
anzeigen
:
Siehe
auch
uasort(
)
,
uksort(
)
,
sort(
)
,
asort(
)
,
arsort(
)
,
ksort(
)
,
natsort(
)
und
rsort(
)
.