(PHP 4, PHP 5, PHP 7, PHP 8)
array_walk — Aplicar una función proporcionada por el usuario a cada miembro de un array
Aplica la función definida por el usuario dada por callback
a cada elemento del array dado por array
.
array_walk() no le afecta el puntero de arrays interno de array
. array_walk() recorrerá el array completo sin tener en cuenta la posición del puntero.
array
El array de entrada.
callback
Normalmente, callback
asume dos parámetros. El primero, los valores de los parámetros de array
, y el segundo la clave/índice.
Nota:
Si
callback
necesita trabajar con los valores reales del array, especifique el primer parámetro decallback
como una referencia. Así, cualquier cambio hecho a esos elementos serán hechos al mismo array original.
Nota:
Muchas funciones internas (por ejemplo strtolower()) lanzarán una advertencia si se pasan más argumentos de los esperados y no son utilizables directamente como
callback
.
Sólo se pueden cambiar potencialmente los valores del parámetro array
; no se puede alterar su estructura, esto es, el programador no puede añadir, destruir o reordenar elementos. Si la llamada de retorno no respeta este requisito, el comportamiento de esta función será indefinido e impredecible.
userdata
Si se proporciona el parámetro opcional userdata
, éste será pasado como el tercer parámetro de la función dada por callback
.
Devuelve true
.
A partir de PHP 7.1.0, un ArgumentCountError será lanzado si la función callback
requiere más de 2 parámetros (el valor y la clave del miembro del array). Anteriormente, si la función callback
requería más de 2 parámetros, se generaba un error de nivel E_WARNING cada vez que array_walk() llamaba a callback
.
Ejemplo #1 Ejemplo de array_walk()
<?php
$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana");
function test_alter(&$elemento1, $clave, $prefijo)
{
$elemento1 = "$prefijo: $elemento1";
}
function test_print($elemento2, $clave)
{
echo "$clave. $elemento2<br />\n";
}
echo "Antes ...:\n";
array_walk($frutas, 'test_print');
array_walk($frutas, 'test_alter', 'fruta');
echo "... y después:\n";
array_walk($frutas, 'test_print');
?>
El resultado del ejemplo sería:
Antes ...: d. limón a. naranja b. banana c. manzana ... y después: d. fruta: limón a. fruta: naranja b. fruta: banana c. fruta: manzana