usort
(PHP 3 >= 3.0.3, PHP 4, PHP 5)
usort --
Sorteer een array via de waarden met een gebruikersfunctie
Beschrijving
bool
usort ( array &array, callback cmp_function )
uksort() zal de waarden van een array sorteren
via een gebruikersgedefinieerde vergelijkingsfunctie. Wanneer je
een array wil sorteren met enkele belangrijke criteria, dan moet je
deze functie gebruiken.
De vergelijkingsfunctie moet een integer teruggeven die kleiner dan,
gelijk aan of groter dan 0 is, wanneer het eerste argument
respectievelijk kleiner dan, gelijk aan of groter wordt beschouwd
dan het tweede argument.
Opmerking:
Wanneer twee waarden beschouwd worden als gelijkwaardig, is hun volgorde
in de gesorteerde array ongedefinieerd. Tot PHP 4.0.6 behield de gebruikersfunctie
de originele volgorde van deze elementen, maar met de introductie van het nieuwe
sorteer algoritme in 4.1.0, is dit niet langer het geval en er is geen oplossing
om dit te doen op efficiente wijze.
Opmerking: Deze functie
wijst nieuwe keys toe aan de elementen in array
.
Het zal bestaande keys, die je mogelijk al had toegewezen, verwijderen,
in plaats van ze te herschikken.
Geeft TRUE terug bij succes, FALSE indien er een fout is opgetreden.
Voorbeeld 1. usort() voorbeeld
<?php 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 => $value) { echo "$key: $value\n"; } ?>
|
Het resultaat van dit script is als volgt: |
Opmerking:
Het spreekt voor zich dat in dit minder kritische geval
de sort() toepasselijker zou zijn.
Voorbeeld 2.
usort() voorbeeld met een multi-dimensionale array
<?php function cmp($a, $b) { return strcmp($a["fruit"], $b["fruit"]); }
$fruits[0]["fruit"] = "lemons"; $fruits[1]["fruit"] = "apples"; $fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) { echo "\$fruits[$key]: " . $value["fruit"] . "\n"; } ?>
|
Bij het sorteren van een multi-dimensionale array, bevatten $a
en $b referenties naar de eerste index van de array.
Het resultaat van dit script is als volgt: $fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons |
|
Voorbeeld 3.
usort() voorbeeld gebruikmakend van een functie van een object
<?php class TestObj { var $name;
function TestObj($name) { $this->name = $name; }
/* Dit is de static vergelijkingsfunctie: */ 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");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) { echo $item->name . "\n"; } ?>
|
Het resultaat van dit script is als volgt: |
Zie ook uasort(),
uksort(), sort(),
asort(),
arsort(),ksort(),
natsort() en rsort().