usort

usort -- Sortiert ein Array nach Werten mittels einer benutzerdefinierten Vergleichsfunktion.

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 .



Beispiel 1 . usort( )










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