array_walk

(PHP 3>= 3.0.3, PHP 4 , PHP 5)

array_walk --  Aplica uma determinada funcão em cada elemento de um array

Descrição

bool array_walk ( array arr, string func [, mixed userdata] )

Retorna TRUE em caso de sucesso ou FALSE em falhas.

Aplica uma função definida pelo usuário nomeada pelo argumento func em cada elemento de arr. Normalmente, func recebe dois argumentos: o primeiro é o valor do elemento e o segundo, sua chave. Se userdata for especificado, ele será usado como terceiro argumento da função do usuário.

Se func necessita de mais argumentos do que o que está sendo passado para ela, um erro do nível E_WARNING será gerado a cada vez que array_walk() executar func. Esses avisos podem ser suprimidos adicionando o operador @ à chamada da função array_walk(), ou usando error_reporting().

Nota: Se func precisar alterar realmente os valores do array, especifique que o primeiro parâmetro de func deve ser passado por referência. Então qualquer mudança feita nesses elementos serão feitas no próprio array também.

Nota: A passagem das chaves e do terceiro argumento para func foi adicionada no PHP 4.0.0.

array_walk() não é afetada pelo ponteiro interno do array arr. array_walk() irá percorrer todo o array independente da posição atual do ponteiro interno. Para reiniciar o ponteiro, use reset(). No PHP 3, array_walk() reinicia o ponteiro.

Usuários não podem alterar o array a partir da função definida para ser usada. Por exemplo, adicionar/remover elementos, removerá o array no qual array_walk() está sendo aplicada. Se o array for alterado, o comportamento desta função se torna imprevisível.

Exemplo 1. Exemplo de array_walk()

<?php
$frutas
= array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia");

function
test_alter(&$item1, $key, $prefix) {
    
$item1 = "$prefix: $item1";
}

function
test_print($item2, $key) {
    echo
"$key. $item2<br>\n";
}

echo
"Antes ...:\n";
array_walk($frutas, 'test_print');

array_walk($frutas, 'test_alter', 'fruta');
echo
"... e depois:\n";

array_walk($frutas, 'test_print');
?>

A saída do programa acima seria:

Antes ...:
d. limao
a. laranja
b. banana
c. melancia
... e depois:
d. fruit: limao
a. fruit: laranja
b. fruit: banana
c. fruit: melancia

Veja também array_map(), list(), foreach, each() e call_user_func_array().