Benutzerdefiniertes Sortieren mit 'usort'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 25 von 68.
Wenn die integrierten Sortierfunktionen von PHP deine spezifischen Anforderungen nicht erfüllen, bietet die Funktion usort() ultimative Flexibilität, da du genau festlegen kannst, wie Elemente verglichen und angeordnet werden sollen. Diese Funktion nimmt dein Array und eine benutzerdefinierte Vergleichsfunktion entgegen, die du schreibst, um die Sortierlogik zu bestimmen.
Die Vergleichsfunktion erhält zwei Elemente aus dem Array und muss eine Ganzzahl zurückgeben: eine negative Zahl, wenn das erste Element vor dem zweiten stehen soll, null, wenn sie gleich sind, oder eine positive Zahl, wenn das erste nach dem zweiten stehen soll.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Ausgabe: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>In diesem Beispiel berechnet die comparison-Funktion den Unterschied zwischen den String-Längen. Wenn strlen($a) - strlen($b) eine negative Zahl zurückgibt, bedeutet das, dass der erste String kürzer ist und im sortierten array zuerst kommen sollte.
Wie andere PHP-Sortierfunktionen verändert usort() das ursprüngliche array direkt. Diese leistungsstarke Funktion eröffnet Möglichkeiten zum Sortieren nach beliebigen Kriterien, die du dir vorstellen kannst, sei es nach der Zeichenfolgenlänge, einer benutzerdefinierten Geschäftslogik oder komplexen Vergleichen mehrerer Felder.
Aufgabe
EinfachDu erhältst eine Eingabe: ein Array von Produktpreisen im JSON-Format. Lies die Eingabe ein, wandle die JSON-Zeichenkette in ein Array um, erstelle eine Vergleichsfunktion, die die Preise in aufsteigender Reihenfolge sortiert, verwende usort() mit deiner Vergleichsfunktion, um das Array zu sortieren, und gib das sortierte Array mit print_r() aus.
Eingabeformat: Eine Zeile mit einem JSON-Array aus Zahlen (Beispiel: [29.99,15.50,42.00,8.75,33.25])
Erwartete Ausgabe: Das nach Preis aufsteigend sortierte Array, ausgegeben mit print_r()
Probier es selbst
<?php
// Eingabe lesen
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Erstelle eine Vergleichsfunktion und verwende usort(), um das Array zu sortieren
// Das sortierte Array ausgeben
print_r($prices);
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Funktionen
Anonyme FunktionenClosures und 'use'Arrow FunctionsCallback-FunktionenVerwendung von 'call_user_func'VariablenfunktionenReferenzübergabeRekursive FunktionenRückblick: Funktions-Medley4Mehrdimensionale Arrays
Ein 2D-Array erstellenZugriff auf 2D-Array-ElementeÄndern von 2D-Array-ElementenIterieren mit verschachtelten Schleifen2D assoziative ArraysZusammenfassung: Einfache Gitter-Übung2Fortgeschrittene Array-Manipulationen
Hinzufügen mit 'array_push'Entfernen mit 'array_pop'Hinzufügen mit 'array_unshift'Entfernen mit 'array_shift'Indizierte Arrays zusammenführenAssoziative Arrays zusammenführenExtrahieren mit 'array_slice'Werte mit 'in_array'Schlüssel mit 'array_search'Rückblick: Playlist-Übung3Arrays sortieren
Indizierte Arrays aufsteigend sortierenIndizierte Arrays absteigend sortierenAssoziative Arrays nach Wert sortierenAssoziative Arrays nach Schlüssel sortierenNatürliche SortierungBenutzerdefiniertes Sortieren mit 'usort'Recap: Leaderboard-SortierungÜbe selbstständig: Online-PHP-Compiler