Volver a la página principal
miércoles 25 septiembre 2024
15

Cómo usar array_walk_recursive() en PHP

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.

¿Qué es 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.

Sintaxis

array_walk_recursive(array &$array, callable $función [, mixed $parámetro])
  • $array: El array en el que deseas aplicar la función.
  • $función: La función de usuario que será aplicada a cada elemento del array. Esta función recibe dos argumentos: el valor y la clave del array.
  • $parámetro: (Opcional) Un parámetro adicional que se puede pasar a la función de usuario.

Ejemplos de uso de array_walk_recursive() en PHP

Ejemplo básico: recorrer un array multidimensional

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

Modificar los valores de un array recursivamente

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
)

Uso de un parámetro adicional

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
)

Consideraciones

  • Pasaje por referencia: Los valores del array se pueden modificar si la función de usuario los pasa por referencia.
  • Arrays multidimensionales: array_walk_recursive() es ideal para procesar arrays anidados, ya que desciende recursivamente en todos los niveles.
  • Tipo de datos: La función de usuario recibe tanto el valor como la clave del array en cada llamada.

Referencia oficial

Para más detalles, consulta la documentación oficial de PHP: Documentación de array_walk_recursive()

Etiquetas:
php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer