Durchlaufen mit 'array_walk'
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 44 von 68.
Die Funktion array_walk() bietet einen anderen Ansatz zur Verarbeitung von Arrays im Vergleich zu array_map(). Während array_map() ein neues Array mit transformierten Werten erstellt, modifiziert 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 Sie das bestehende Array ändern möchten, ohne eine Kopie zu erstellen. Die von Ihnen bereitgestellte Callback-Funktion erhält jedes Array-Element per Referenz, was es Ihnen ermöglicht, die ursprünglichen Werte direkt zu ändern.
<?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"]
?>Beachten Sie, wie die Callback-Funktion &$value verwendet, um das Array-Element per Referenz zu erhalten. Dies ermöglicht es der Funktion, das ursprüngliche Array-Element direkt zu ändern. Der zweite Parameter $key bietet Zugriff auf den Schlüssel des aktuellen Elements, obwohl er für einfache Transformationen nicht immer benötigt wird.
array_walk() unterstützt auch ein optionales drittes Argument, mit dem Sie zusätzliche Daten direkt an Ihre Callback-Funktion übergeben können. Dies ist nützlich, wenn Ihre Transformation von einem Wert abhängt, der außerhalb des Arrays definiert ist – wie zum Beispiel ein Präfix, Suffix oder eine andere dynamische Eingabe.
Wenn Sie ein drittes Argument an array_walk() übergeben, erhält Ihre Callback-Funktion dieses als dritten Parameter:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products ist jetzt: ["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 können Sie dieselbe Callback-Funktion mit verschiedenen Präfixen wiederverwenden, ohne Werte darin fest zu kodieren.
Aufgabe
EinfachSie erhalten zwei Eingaben: eine kommagetrennte Liste von Produktnamen und ein Kategorie-Präfix. Die erste Eingabe enthält Produktnamen als String im Format laptop,mouse,keyboard,monitor, und die zweite Eingabe ist ein Kategorie-Präfix-Text (Beispiel: Electronics).
Lesen Sie beide Eingaben ein, konvertieren Sie die kommagetrennten Produktnamen in ein Array, erstellen Sie eine Callback-Funktion, die das Kategorie-Präfix zu jedem Produktnamen im Format "Category: ProductName" hinzufügt, verwenden Sie array_walk() mit Ihrer Callback-Funktion, um das ursprüngliche Array direkt zu ändern, und geben Sie jeden geänderten Produktnamen in einer neuen Zeile aus.
Ihre Callback-Funktion muss den Parameter &$value verwenden, um Array-Elemente per Referenz zu ändern. Die Funktion sollte das Kategorie-Präfix mit einem Doppelpunkt und einem Leerzeichen verketten, gefolgt vom Produktnamen.
Eingabeformat:
- Erste Zeile: Kommagetrennte Produktnamen (Beispiel:
laptop,mouse,keyboard,monitor) - Zweite Zeile: Kategorie-Präfix-Text (Beispiel:
Electronics)
Erwartete Ausgabe: Jeder geänderte Produktname wird in einer separaten Zeile im Format Category: ProductName ausgegeben.
Probier es selbst
<?php
// Lies die kommagetrennten Produktnamen ein
$products_input = trim(fgets(STDIN));
// Lies das Kategorie-Präfix ein
$category = trim(fgets(STDIN));
// Konvertiere den kommagetrennten String in ein Array
$products = explode(',', $products_input);
// TODO: Schreibe deinen Code unten
// 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