Menu
CoddyTech

Reduzieren mit 'array_reduce'

Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 43 von 68.

Die Funktion array_reduce() geht anders vor als array_map() und array_filter(). Anstatt ein neues Array zurückzugeben, verarbeitet sie alle Elemente eines Arrays, um einen einzelnen Wert zu erzeugen. Dadurch eignet sie sich perfekt für Vorgänge wie das Berechnen von Summen, das Finden von Höchstwerten oder das Zusammenführen aller Elemente zu einem Ergebnis.

Die Funktion erhält das zu verarbeitende Array und eine Callback-Funktion, die festlegt, wie Elemente kombiniert werden, sowie einen optionalen dritten Parameter: den Anfangswert. Die Callback-Funktion erhält zwei Parameter: das angesammelte Ergebnis (den sogenannten „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 Anfangswert von 0 und ruft dann wiederholt addNumbers mit der laufenden Summe und jedem Array-Element auf. Dieser Akkumulationsprozess wird fortgesetzt, bis alle Elemente verarbeitet sind, sodass am Ende der endgültige reduzierte Wert übrig bleibt.

challenge icon

Aufgabe

Einfach

Du 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 eigene Callback-Funktion, die die angegebene Operation ausführt, verwende array_reduce() mit deiner Callback-Funktion und einem passenden Anfangswert, um alle Zahlen zu einem einzelnen Ergebnis zu verarbeiten, und gib das Endergebnis aus.

Details zu den Operationen:

  • S (Summe): Addiere alle Zahlen (Anfangswert: 0)
  • P (Produkt): Multipliziere alle Zahlen miteinander (Anfangswert: 1)
  • M (Maximum): Finde die größte Zahl (Anfangswert: erste Zahl im Array oder eine sehr kleine Zahl)

Deine Callback-Funktion sollte zwei Parameter akzeptieren: das angesammelte Ergebnis (carry) und das aktuelle Array-Element (item), und anschließend den aktualisierten angesammelten Wert entsprechend dem Operationstyp zurückgeben.

Eingabeformat:

  • Erste Zeile: Durch Kommas getrennte Zahlen (Beispiel: 5,10,15,20,25)
  • Zweite Zeile: Operationstyp – entweder S, P oder M (Beispiel: S)

Erwartete Ausgabe: Eine einzelne Zahl, die das Ergebnis der Reduce-Operation darstellt

Probier es selbst

<?php
// Eingabe einlesen
$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 geeigneten Anfangswert


// Ergebnis ausgeben
echo $result;
?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-PHP-Compiler