W3docs

La función array_walk() de PHP: cómo usarla para manipular arrays de forma eficiente

Aprende cómo array_walk() de PHP aplica un callback a cada elemento de un array in situ, con sintaxis, ejemplos, errores comunes y comparación con array_map().

array_walk() es una función integrada de PHP que aplica un callback a cada elemento de un array, in situ. A diferencia de array_map(), que construye y devuelve un nuevo array, array_walk() recorre el array existente y te permite modificar cada elemento directamente mediante una referencia. Esta página cubre su sintaxis, cuándo utilizarla en lugar de un bucle foreach simple o array_map(), los errores comunes al modificar valores y cómo recorrer arrays anidados con array_walk_recursive().

Sintaxis

array_walk(array &$array, callable $callback, mixed $arg = null): true
ParámetroRequeridoDescripción
$arrayEl array sobre el que se itera. Se pasa por referencia, por lo que el callback puede modificar sus elementos.
$callbackUn callable ejecutado una vez por elemento. Su firma es callback($value, $key, $arg). Para modificar un elemento, declara el primer parámetro por referencia: function (&$value) { ... }.
$argNoUn argumento extra opcional que se pasa como tercer parámetro en cada llamada al callback.

array_walk() siempre devuelve true (devuelve false únicamente ante un error de tipo). No devuelve el array modificado — el array que pasaste se cambia directamente.

¿Por qué pasar $value por referencia? Sin el &, el callback recibe una copia de cada elemento, por lo que cualquier cambio se descarta. Añade & (como en function (&$value)) y tus modificaciones se escriben de vuelta en el array original. Consulta funciones PHP y callable para más información sobre callbacks.

Ejemplos del uso de array_walk()

Ejemplo 1: Modificar arrays

Uno de los usos principales de array_walk() es modificar arrays. Gracias a su capacidad para aplicar una función definida por el usuario a cada elemento de un array, es una forma sencilla de transformar un array según tus necesidades específicas. A continuación se muestra un ejemplo de cómo usar array_walk() para cambiar las mayúsculas de todos los elementos de un array.

Ejemplo PHP 1: Modificar arrays

php— editable, runs on the server

Salida:

Array
(
    [0] => APPLE
    [1] => BANANA
    [2] => CHERRY
)

En este ejemplo, primero definimos un array con tres elementos. Luego definimos una función personalizada llamada change_case() que utiliza la función integrada de PHP strtoupper() para convertir cada elemento a mayúsculas. A continuación usamos la función array_walk() para aplicar change_case() a cada elemento del array. Por último, usamos la función print_r() para mostrar el array modificado.

Ejemplo 2: Realizar cálculos

Otro uso potente de array_walk() es realizar cálculos sobre arrays. Gracias a su capacidad para aplicar una función definida por el usuario a cada elemento, puedes usar array_walk() para ejecutar una amplia variedad de cálculos sobre tus arrays. A continuación se muestra un ejemplo de cómo usar array_walk() para calcular la suma de todos los elementos de un array.

Ejemplo 2: Realizar cálculos

php— editable, runs on the server

Salida:

The total sum is: 15

En este ejemplo, primero definimos un array con cinco elementos. Luego definimos una función anónima que añade cada elemento a un total acumulado. Usamos la función array_walk() para aplicar la función a cada elemento del array. Por último, mostramos la suma total con la sentencia echo.

Ejemplo 3: Recorrer arrays multidimensionales

array_walk() simple solo visita los elementos del nivel superior, por lo que en un array anidado tu callback recibiría los arrays internos en lugar de los valores hoja. Para datos anidados, usa la función complementaria array_walk_recursive(), que desciende a los sub-arrays y ejecuta tu callback en cada valor hoja. Aquí convertimos a mayúsculas todas las cadenas de un array de dos niveles.

Ejemplo PHP 3: Trabajar con arrays multidimensionales

php— editable, runs on the server

Salida:

Array
(
    [0] => Array
        (
            [0] => APPLE
            [1] => BANANA
            [2] => CHERRY
        )

    [1] => Array
        (
            [0] => ORANGE
            [1] => GRAPE
            [2] => PINEAPPLE
        )

)

array_walk_recursive() recorre la estructura en profundidad y llama a change_case() en cada cadena hoja, manteniendo intacta la forma anidada del array mientras convierte cada valor a mayúsculas.

Errores comunes

  • Olvidar el &. Si el primer parámetro de tu callback no es por referencia (function (&$value)), las modificaciones se descartan silenciosamente. Este es el error más frecuente con array_walk().
  • Devolver un valor no tiene efecto. array_walk() ignora lo que devuelva tu callback. Solo escribe los cambios realizados a través del parámetro de referencia. Si quieres construir una copia transformada, usa array_map().
  • El orden de los parámetros del callback es ($value, $key) — primero el valor, luego la clave. Esto es lo opuesto de lo que algunos desarrolladores esperan.
  • No puedes añadir ni eliminar claves. Asignar $array = null dentro del callback o cambiar la estructura del array durante el recorrido provoca un comportamiento indefinido. Usa array_walk() únicamente para transformar valores in situ.

array_walk() vs. array_map() vs. foreach

Herramienta¿Modifica in situ?DevuelveIdeal para
array_walk()Sí (mediante referencia)trueMutar un array existente o ejecutar un efecto secundario por elemento
array_map()NoUn nuevo arrayProducir una copia transformada sin tocar el original
foreachSí (con &$value)Iteración general con break/continue y control de flujo completo
array_reduce()NoUn único valorReducir un array a un solo resultado (suma, concatenación, etc.)

Usa array_walk() cuando quieras conservar el mismo array y cambiar sus valores in situ, o cuando necesites que cada callback reciba tanto el valor como la clave. Elige array_map() cuando quieras un array nuevo y dejar el original sin modificar.

Conclusión

array_walk() aplica un callback a cada elemento de un array in situ, lo que lo convierte en una forma limpia de transformar valores, ejecutar efectos secundarios por elemento o procesar pares clave/valor sin escribir un bucle explícito. Recuerda tomar el valor por referencia cuando pretendas modificarlo, usa array_walk_recursive() con arrays anidados y prefiere array_map() cuando prefieras construir un nuevo array en lugar de mutar el original. Para más información sobre la iteración en arrays, consulta arrays PHP y el bucle foreach.

Práctica

Práctica
¿Cuál es la funcionalidad de la función 'array_walk()' en PHP?
¿Cuál es la funcionalidad de la función 'array_walk()' en PHP?
Was this page helpful?