array_walk

(PHP 3>= 3.0.3, PHP 4 )

array_walk --  Esegue una funzione su ogni elemento dell'array

Descrizione

int array_walk ( array array, string funzione [, mixed datiutente])

Esegue la funzione definita dall'utente identificata da funzione su ogni elemento di array. A funzione verrà passato il valore dell'elemento come primo parametro e la chiave come secondo parametro. Se datiutente è specificato, verrà passato come terzo parametro alla funzione. funzione deve essere una funzione definita dall'utente, e non può essere una funzione nativa PHP. Quindi, non si può usare array_walk() direttamente con str2lower(), bensì occorre costruire una funzione utente con tale istruzione, e passarla come argomento.

Nota: Invece di un nome di funzione è possibile passare un vettore contenente un riferimento ad un oggetto e un nome di metodo.

Se funzione richiede più di due o tre argomenti, a seconda di datiutente, un warning verrà generato ogni qualvolta array_walk() chiami funzione. Questi warning possono essere soppressi apponendo il simbolo '@' alla chiamata di array_walk(), oppure usando error_reporting().

Nota: Se funzione deve lavorare con i reali valori dell'array, specificare che il primo parametro di funzione deve essere passato come riferimento. A qesto punto ogni modifica a questi elementi verrà effettuata sull'array stesso.

Modificare l'array all'interno di func può causare comportamenti imprevedibili.

Nota: Il passaggio della chiave e di datiutente a func è stato aggiunto nella versione 4.0.

In PHP 4 la funzione reset() deve essere chiamata obbligatoriamente, in quanto array_walk() non reinizializza automaticamente l'array.

Gli utenti non possono modificare l'array attraverso la funzione di callback, ad esempio aggiungere/togliere un elemento, o cancellare l'array su cui array_walk() è applicata. Se l'array viene cambiato, il comportamento di questa funzione non è definito.

Esempio 1. esempio di array_walk()

$frutta = array ("d"=>"limone", "a"=>"arancia", "b"=>"banana", "c"=>"mela");

function modifica (&$elemento1, $chiave, $prefisso) {
    $elemento1 = "$prefisso: $elemento1";
}

function stampa ($elemento2, $chiave) {
    echo "$chiave. $elemento2<br>\n";
}
echo "Prima ...:\n";
array_walk ($frutta, 'stampa');
reset ($frutta);
array_walk ($frutta, 'modifica', 'frutto');
echo "... e dopo:\n";
reset ($frutta);
array_walk ($frutta, 'stampa');

Il risultato del programma sarà:
Prima ...:
d. limone
a. arancia
b. banana
c. mela
... and after:
d. frutto: limone
a. frutto: arancia
b. frutto: banana
c. frutto: mela

Vedere anche each() e list().