Assoziative Arrays nach Wert sortieren
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 22 von 68.
Bei der Arbeit mit assoziativen Arrays musst du sie oft nach ihren Werten sortieren und dabei die Schlüssel-Wert-Beziehungen beibehalten. PHP stellt dafür zwei spezialisierte Funktionen bereit: asort() für aufsteigende Reihenfolge und arsort() für absteigende Reihenfolge.
So funktioniert asort(), um nach Werten in aufsteigender Reihenfolge zu sortieren:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// Ausgabe: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>Beachte, wie die Noten jetzt vom niedrigsten zum höchsten Wert angeordnet sind, aber der Name jedes Schülers weiterhin korrekt seiner Note zugeordnet bleibt. Dies ist der entscheidende Vorteil von asort() gegenüber dem regulären sort(). Die Zuordnung zwischen Schlüsseln und Werten bleibt erhalten.
Für die Reihenfolge descending funktioniert arsort() ähnlich, ordnet die Werte jedoch vom höchsten zum niedrigsten an:
<?php
arsort($students);
print_r($students);
// Ausgabe: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>Beide Funktionen ändern das ursprüngliche array direkt, genau wie ihre Gegenstücke für indizierte arrays. Dadurch eignen sie sich perfekt zum Organisieren von Daten wie Schülernoten, Produktpreisen oder für jedes Szenario, in dem du nach Wert sortieren musst, während die Schlüssel-Wert-Paare intakt bleiben.
Aufgabe
EinfachDu erhältst eine Eingabe: ein assoziatives Array mit den Namen der Angestellten und ihren Gehältern im JSON-Format. Lies die Eingabe ein, wandle den JSON-String in ein Array um, verwende arsort(), um die Angestellten nach Gehalt in absteigender Reihenfolge (vom höchsten zum niedrigsten) zu sortieren, und gib das sortierte Array mit print_r() aus.
Eingabeformat: Eine Zeile mit einem JSON-Objekt, in dem die Namen der Angestellten als Schlüssel und die Gehälter als Werte angegeben sind (Beispiel: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
Erwartete Ausgabe: Das sortierte assoziative Array in absteigender Reihenfolge nach den Gehaltswerten, angezeigt mit print_r()
Probier es selbst
<?php
// Eingabe lesen
$input = fgets(STDIN);
// JSON in assoziatives Array umwandeln
$employees = (array)json_decode($input, true);
// TODO: Schreibe deinen Code darunter, um das Array nach Gehalt in absteigender Reihenfolge zu sortieren
// Das sortierte Array ausgeben
print_r($employees);
?>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