Durchlaufen mit 'array_walk'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy. Lektion 44 von 68.
Die Funktion array_walk() bietet im Vergleich zu array_map() einen anderen Ansatz zur Verarbeitung von Arrays. Während array_map() ein neues Array mit transformierten Werten erstellt, verändert array_walk() das ursprüngliche Array direkt, indem eine Callback-Funktion auf jedes Element an Ort und Stelle angewendet wird.
Diese Funktion ist besonders nützlich, wenn du das vorhandene Array ändern möchtest, ohne eine Kopie zu erstellen. Die von dir bereitgestellte Callback-Funktion erhält jedes Array-Element als Referenz, sodass du die ursprünglichen Werte direkt ändern kannst.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items ist jetzt: ["Item: apple", "Item: banana", "Item: orange"]
?>Beachte, wie die Callback-Funktion &$value verwendet, um das Array-Element als Referenz zu empfangen. Dadurch kann die Funktion das ursprüngliche Array-Element direkt ändern. Der zweite Parameter $key ermöglicht den Zugriff auf den Schlüssel des aktuellen Elements, obwohl er für einfache Transformationen nicht immer benötigt wird.
array_walk() unterstützt außerdem ein optionales drittes Argument, mit dem du zusätzliche Daten direkt an deine Callback-Funktion übergeben kannst. Das ist nützlich, wenn deine Transformation von einem außerhalb des Arrays definierten Wert abhängt, beispielsweise einem Präfix, Suffix oder einer anderen dynamischen Eingabe.
Wenn du ein drittes Argument an array_walk() übergibst, erhält deine Callback-Funktion es als dritten Parameter:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Hier wird $prefix als drittes argument an array_walk() übergeben, und der callback erhält es als $category. Auf diese Weise kannst du dieselbe callback-function mit verschiedenen prefix wiederverwenden, ohne darin Werte fest zu codieren.
Aufgabe
EinfachDu erhältst zwei Eingaben: eine durch Kommas getrennte Liste von Produktnamen und ein Kategoriepräfix. Die erste Eingabe enthält Produktnamen als Zeichenfolge im Format laptop,mouse,keyboard,monitor, und die zweite Eingabe ist ein Text mit einem Kategoriepräfix (Beispiel: Electronics).
Lies beide Eingaben ein, wandle die durch Kommas getrennten Produktnamen in ein Array um, erstelle eine Callback-Funktion, die jedem Produktnamen das Kategoriepräfix im Format "Category: ProductName" hinzufügt, verwende array_walk() mit deiner Callback-Funktion, um das ursprüngliche Array direkt zu ändern, und gib jeden geänderten Produktnamen in einer eigenen Zeile aus.
Deine Callback-Funktion muss den Parameter &$value verwenden, um Array-Elemente per Referenz zu ändern. Die Funktion soll das Kategoriepräfix mit einem Doppelpunkt und einem Leerzeichen verketten, gefolgt vom Produktnamen.
Eingabeformat:
- Erste Zeile: Durch Kommas getrennte Produktnamen (Beispiel:
laptop,mouse,keyboard,monitor) - Zweite Zeile: Text mit dem Kategoriepräfix (Beispiel:
Electronics)
Erwartete Ausgabe: Jeder geänderte Produktname wird in einer eigenen Zeile im Format Category: ProductName ausgegeben.
Probier es selbst
<?php
// Die kommagetrennten Produktnamen einlesen
$products_input = trim(fgets(STDIN));
// Das Kategorie-Präfix einlesen
$category = trim(fgets(STDIN));
// Die kommagetrennte Zeichenkette in ein Array umwandeln
$products = explode(',', $products_input);
// TODO: Schreibe deinen Code darunter
// Erstelle eine Callback-Funktion, die jeden Produktnamen durch Hinzufügen des Kategorie-Präfixes modifiziert
// Verwende array_walk() mit deiner Callback-Funktion, um das Array zu modifizieren
// Gib jeden modifizierten Produktnamen in einer separaten Zeile aus
foreach ($products as $product) {
echo $product . "\n";
}
?>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