La función array_walk_recursive()
en PHP se utiliza para aplicar una función a cada elemento de un array multidimensional de forma recursiva. A diferencia de array_walk()
, que solo funciona en el primer nivel de un array, array_walk_recursive()
desciende a todos los niveles de un array y aplica una función a cada valor encontrado.
array_walk_recursive()
en PHP?
array_walk_recursive()
recorre todos los elementos de un array, incluidas las submatrices, y aplica una función de usuario a cada valor. Es útil para transformar o procesar arrays complejos con estructuras anidadas, como convertir valores, realizar cálculos o limpiar datos.
array_walk_recursive(array &$array, callable $función [, mixed $parámetro])
array_walk_recursive()
en PHP
En este ejemplo, aplicamos una función que imprime cada clave y valor de un array multidimensional.
<?php
$array = [
"nombre" => "Juan",
"datos" => [
"edad" => 30,
"ciudad" => "Madrid"
],
"intereses" => [
"deportes" => "Fútbol",
"comida" => "Pizza"
]
];
// Función que imprime la clave y el valor
function imprimirElemento($valor, $clave) {
echo "$clave: $valor\n";
}
// Aplicar array_walk_recursive
array_walk_recursive($array, 'imprimirElemento');
?>
Salida:
nombre: Juan
edad: 30
ciudad: Madrid
deportes: Fútbol
comida: Pizza
En este ejemplo, usamos array_walk_recursive()
para modificar cada valor del array.
<?php
$array = [
"producto" => "camisa",
"detalles" => [
"precio" => 30,
"color" => "azul"
]
];
// Función que modifica los valores
function agregarIVA(&$valor, $clave) {
if (is_numeric($valor)) {
$valor = $valor * 1.21; // Aplicar un 21% de IVA
}
}
// Aplicar array_walk_recursive para modificar los valores numéricos
array_walk_recursive($array, 'agregarIVA');
print_r($array);
?>
Salida:
Array
(
[producto] => camisa
[precio] => 36.3
[color] => azul
)
Puedes pasar un parámetro adicional a la función de usuario para modificar su comportamiento.
<?php
$array = [
"artículo" => "libro",
"detalles" => [
"precio" => 50,
"cantidad" => 3
]
];
// Función que suma un valor adicional al precio
function ajustarValor(&$valor, $clave, $porcentaje) {
if (is_numeric($valor)) {
$valor += $valor * $porcentaje / 100;
}
}
// Aplicar un ajuste del 10%
array_walk_recursive($array, 'ajustarValor', 10);
print_r($array);
?>
Salida:
Array
(
[artículo] => libro
[precio] => 55
[cantidad] => 3
)
array_walk_recursive()
es ideal para procesar arrays anidados, ya que desciende recursivamente en todos los niveles.
Para más detalles, consulta la documentación oficial de PHP: Documentación de array_walk_recursive()
Jorge García
Fullstack developer