Benutzerdefiniertes Sortieren mit 'usort'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 25 von 68.
Wenn die integrierten Sortierfunktionen von PHP Ihren spezifischen Anforderungen nicht entsprechen, bietet die Funktion usort() die ultimative Flexibilität, indem sie es Ihnen ermöglicht, genau zu definieren, wie Elemente verglichen und geordnet werden sollen. Diese Funktion nimmt Ihr Array und eine von Ihnen geschriebene benutzerdefinierte Vergleichsfunktion entgegen, 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 Vergleichsfunktion die Differenz zwischen den String-Längen. Wenn strlen($a) - strlen($b) eine negative Zahl zurückgibt, bedeutet dies, dass der erste String kürzer ist und im sortierten Array an erster Stelle stehen sollte.
Wie andere PHP-Sortierfunktionen modifiziert usort() das ursprüngliche Array direkt. Diese leistungsstarke Funktion eröffnet Möglichkeiten für das Sortieren nach beliebigen Kriterien, die Sie sich vorstellen können – sei es die String-Länge, benutzerdefinierte Geschäftslogik oder komplexe Vergleiche über mehrere Felder.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachSie erhalten eine Eingabe: ein Array von Produktpreisen im JSON-Format. Lesen Sie die Eingabe ein, konvertieren Sie den JSON-String in ein Array, erstellen Sie eine Vergleichsfunktion, die die Preise in aufsteigender Reihenfolge sortiert, verwenden Sie usort() mit Ihrer Vergleichsfunktion, um das Array zu sortieren, und geben Sie das sortierte Array mit print_r() aus.
Eingabeformat: Eine Zeile, die ein JSON-Array von Zahlen enthält (Beispiel: [29.99,15.50,42.00,8.75,33.25])
Erwartete Ausgabe: Das nach Preis aufsteigend sortierte Array, angezeigt mit print_r()
Spickzettel
Die Funktion usort() ermöglicht benutzerdefiniertes Sortieren, indem sie eine Vergleichsfunktion akzeptiert, die die Sortierlogik definiert.
Die Vergleichsfunktion erhält zwei Elemente und muss Folgendes zurückgeben:
- Negative Zahl: Das erste Element kommt vor dem zweiten
- Null: Die Elemente sind gleich
- Positive Zahl: Das erste Element kommt nach dem zweiten
<?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 )
?>Wie andere PHP-Sortierfunktionen modifiziert usort() das ursprüngliche Array direkt.
Probier es selbst
<?php
// Eingabe lesen
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Erstellen Sie eine Vergleichsfunktion und verwenden Sie 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