Reduzieren mit 'array_reduce'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 43 von 68.
Die Funktion array_reduce() verfolgt einen anderen Ansatz als array_map() und array_filter(). Anstatt ein neues Array zurückzugeben, verarbeitet sie alle Elemente in einem Array, um einen einzelnen Wert zu erzeugen. Dies macht sie ideal für Operationen wie das Berechnen von Summen, das Finden von Maximalwerten oder das Kombinieren aller Elemente zu einem einzigen Ergebnis.
Die Funktion erfordert drei Parameter: das zu verarbeitende Array, eine Callback-Funktion, die festlegt, wie Elemente kombiniert werden, und einen optionalen Anfangswert. Die Callback-Funktion erhält zwei Parameter: das angesammelte Ergebnis (genannt „carry“) und das aktuelle Array-Element.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Ergebnis: 15
?>In diesem Beispiel beginnt die Funktion mit einem Initialwert von 0 und ruft dann wiederholt addNumbers mit der laufenden Summe und jedem Array-Element auf. Dieser Akkumulationsprozess wird fortgesetzt, bis alle Elemente verarbeitet wurden, sodass Sie den endgültigen reduzierten Wert erhalten.
Aufgabe
EinfachDu erhältst zwei Eingaben: eine durch Kommas getrennte Liste von Zahlen und einen Operationstyp. Die erste Eingabe enthält Zahlen als Zeichenfolge im Format 5,10,15,20,25, und die zweite Eingabe ist ein einzelnes Zeichen, das die Operation angibt: S für die Summe, P für das Produkt oder M für das Maximum.
Lies beide Eingaben ein, wandle die durch Kommas getrennten Zahlen in ein Array von Ganzzahlen um, erstelle eine benutzerdefinierte Callback-Funktion, die die angegebene Operation ausführt, verwende array_reduce() mit deiner Callback-Funktion und einem passenden Anfangswert, um alle Zahlen zu einem einzigen Ergebnis zu verarbeiten, und gib das Endergebnis aus.
Details zu den Operationen:
S(Summe): Addiere alle Zahlen (Anfangswert: 0)P(Produkt): Multipliziere alle Zahlen (Anfangswert: 1)M(Maximum): Ermittle die größte Zahl (Anfangswert: erste Zahl im Array oder eine sehr kleine Zahl)
Deine Callback-Funktion sollte zwei Parameter akzeptieren: das akkumulierte Ergebnis (carry) und das aktuelle Array-Element (item), und anschließend den aktualisierten akkumulierten Wert basierend auf dem Operationstyp zurückgeben.
Eingabeformat:
- Erste Zeile: Durch Kommas getrennte Zahlen (Beispiel:
5,10,15,20,25) - Zweite Zeile: Operationstyp – entweder
S,PoderM(Beispiel:S)
Erwartete Ausgabe: Eine einzelne Zahl, die das Ergebnis der Reduce-Operation darstellt
Probier es selbst
<?php
// Eingabe lesen
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Kommagetrennte Zeichenfolge in ein Array von Ganzzahlen umwandeln
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Schreibe deinen Code unten
// Erstelle eine Callback-Funktion basierend auf dem Operationstyp
// Verwende array_reduce() mit deiner Callback-Funktion und einem angemessenen Initialwert
// Das Ergebnis ausgeben
echo $result;
?>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-Sortierung6Array-Funktionen höherer Ordnung
Transformieren mit 'array_map''array_map' mit benutzerdefinierten FunktionenFiltern mit 'array_filter''array_filter' mit benutzerdefinierten FunktionenReduzieren mit 'array_reduce'Durchlaufen mit 'array_walk'Zusammenfassung: DatenverarbeitungÜbe selbstständig: Online-PHP-Compiler