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 es eine Callback-Funktion in-place auf jedes Element anwendet.
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() akzeptiert außerdem ein optionales drittes Argument — zusätzliche Daten, die direkt als dritter Parameter an Ihren Callback übergeben werden. Dies ist nützlich, wenn Ihre Transformation von einem Wert abhängt, der außerhalb des Arrays definiert ist.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items ist jetzt: ["Item: apple", "Item: banana", "Item: orange"]
?>Hier wird der String
"Item: " als drittes Argument an array_walk() übergeben und als $prefix innerhalb des Callbacks empfangen. Dies ermöglicht es Ihnen, denselben Callback mit verschiedenen zusätzlichen Werten wiederzuverwenden.Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
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 separaten 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.
Spickzettel
Die Funktion array_walk() modifiziert das ursprüngliche Array direkt, indem sie eine Callback-Funktion auf jedes Element an Ort und Stelle anwendet, im Gegensatz zu array_map(), das ein neues Array erstellt.
Die Callback-Funktion erhält jedes Array-Element per Referenz mittels &$value, was eine direkte Änderung der ursprünglichen Werte ermöglicht. Der zweite Parameter $key bietet Zugriff auf den Schlüssel des aktuellen Elements.
array_walk() akzeptiert außerdem ein optionales drittes Argument — zusätzliche Daten, die als dritter Parameter an den Callback übergeben werden. Dies ist nützlich, wenn Ihr Callback zusätzliche Informationen benötigt, um jedes Element zu verarbeiten.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
// Using the optional third argument (extra data):
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits is now: ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>Probier es selbst
<?php
// Einlesen der kommagetrennten Produktnamen
$products_input = trim(fgets(STDIN));
// Einlesen des Kategorie-Präfixes
$category = trim(fgets(STDIN));
// Umwandeln des kommagetrennten Strings in ein Array
$products = explode(',', $products_input);
// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie eine Callback-Funktion, die jeden Produktnamen durch Hinzufügen des Kategorie-Präfixes modifiziert
// Verwenden Sie array_walk() mit Ihrer Callback-Funktion, um das Array zu modifizieren
// Ausgabe jedes modifizierten Produktnamens in einer separaten Zeile
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