Iterare con 'array_walk'
Fa parte della sezione Logica e flusso del percorso PHP di Coddy. Lezione 44 di 68.
La funzione array_walk() offre un approccio diverso all'elaborazione degli array rispetto a array_map(). Mentre array_map() crea un nuovo array con valori trasformati, array_walk() modifica direttamente l'array originale applicando una funzione di callback a ogni elemento sul posto.
Questa funzione è particolarmente utile quando vuoi modificare l'array esistente senza crearne una copia. La funzione di callback che fornisci riceve ogni elemento dell'array per riferimento, consentendoti di modificare direttamente i valori originali.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items ora contiene: ["Item: apple", "Item: banana", "Item: orange"]
?>Nota come la funzione di callback usa &$value per ricevere l'elemento dell'array per riferimento. Questo consente alla funzione di modificare direttamente l'elemento originale dell'array. Il secondo parametro $key permette di accedere alla chiave dell'elemento corrente, anche se non è sempre necessario per le trasformazioni semplici.
array_walk() supporta anche un terzo argomento facoltativo che ti consente di passare dati aggiuntivi direttamente alla funzione di callback. È utile quando la trasformazione dipende da un valore definito al di fuori dell'array, come un prefisso, un suffisso o qualsiasi altro input dinamico.
Quando passi un terzo argomento a array_walk(), la tua funzione callback lo riceve come terzo parametro:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products ora è: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Qui, $prefix viene passato come terzo argomento a array_walk() e la funzione di callback lo riceve come $category. In questo modo, puoi riutilizzare la stessa funzione di callback con prefissi diversi senza codificare alcun valore al suo interno.
Sfida
FacileRiceverai due input: un elenco di nomi di prodotti separati da virgole e un prefisso di categoria. Il primo input contiene i nomi dei prodotti come stringa nel formato laptop,mouse,keyboard,monitor, mentre il secondo input è un testo che rappresenta un prefisso di categoria (esempio: Electronics).
Leggi entrambi gli input, converti i nomi dei prodotti separati da virgole in un array, crea una funzione callback che aggiunga il prefisso di categoria a ogni nome di prodotto nel formato "Category: ProductName", usa array_walk() con la tua funzione callback per modificare direttamente l'array originale e stampa ogni nome di prodotto modificato su una riga separata.
La tua funzione callback deve usare il parametro &$value per modificare gli elementi dell'array per riferimento. La funzione deve concatenare il prefisso di categoria con due punti e uno spazio, seguito dal nome del prodotto.
Formato di input:
- Prima riga: nomi dei prodotti separati da virgole (esempio:
laptop,mouse,keyboard,monitor) - Seconda riga: testo del prefisso di categoria (esempio:
Electronics)
Output previsto: ogni nome di prodotto modificato stampato su una riga separata nel formato Category: ProductName
Provalo tu
<?php
// Leggi i nomi dei prodotti separati da virgole
$products_input = trim(fgets(STDIN));
// Leggi il prefisso della categoria
$category = trim(fgets(STDIN));
// Converti la stringa separata da virgole in un array
$products = explode(',', $products_input);
// TODO: Scrivi il tuo codice qui sotto
// Crea una funzione di callback che modifichi ogni nome di prodotto aggiungendo il prefisso della categoria
// Usa array_walk() con la tua funzione di callback per modificare l'array
// Stampa ogni nome di prodotto modificato su una riga separata
foreach ($products as $product) {
echo $product . "\n";
}
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Funzioni avanzate
Funzioni anonimeClosure e 'use'Funzioni frecciaFunzioni callbackUso di 'call_user_func'Funzioni variabiliPassaggio per riferimentoFunzioni ricorsiveRiepilogo: carrellata di funzioni4Array multidimensionali
Creare un array 2DAccedere agli elementi di un array 2DModificare gli elementi di un array 2DIterare con cicli annidatiArray associativi 2DRipasso: esercizio con una griglia semplice2Manipolazioni avanzate degli array
Aggiungere con 'array_push'Rimuovere con 'array_pop'Aggiungere con 'array_unshift'Rimuovere con 'array_shift'Unire array indicizzatiUnire array associativiEstrarre con 'array_slice'Valori con 'in_array'Chiavi con 'array_search'Riepilogo: esercizio playlist3Ordinare gli array
Ordina gli array indicizzati in ordine crescenteOrdina gli array indicizzati in ordine decrescenteOrdina gli array associativi per valoreOrdina gli array associativi per chiaveOrdinamento naturaleOrdinamento personalizzato con 'usort'Ripasso: ordinamento della classifica6Funzioni di ordine superiore sugli array
Trasformare con 'array_map''array_map' con una funzione personalizzataFiltrare con 'array_filter''array_filter' con una funzione personalizzataRidurre con 'array_reduce'Iterare con 'array_walk'Riepilogo: elaborazione dei datiEsercitati da solo: Compilatore PHP online