Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Riceverai 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";
}
?>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore PHP online