Recorrido con 'array_walk'
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 44 de 68.
La función array_walk() ofrece un enfoque diferente para procesar arrays en comparación con array_map(). Mientras que array_map() crea un nuevo array con valores transformados, array_walk() modifica el array original directamente aplicando una función de callback a cada elemento in-situ.
Esta función es particularmente útil cuando deseas cambiar el array existente sin crear una copia. La función de callback que proporciones recibe cada elemento del array por referencia, lo que te permite modificar los valores originales directamente.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items es ahora: ["Item: apple", "Item: banana", "Item: orange"]
?>Observe cómo la función de callback utiliza &$value para recibir el elemento del array por referencia. Esto permite que la función modifique el elemento original del array directamente. El segundo parámetro $key proporciona acceso a la clave del elemento actual, aunque no siempre es necesario para transformaciones simples.
array_walk() también admite un tercer argumento opcional que permite pasar datos adicionales directamente a la función de callback. Esto es útil cuando la transformación depende de un valor definido fuera del array, como un prefijo, un sufijo o cualquier otra entrada dinámica.
Cuando pasas un tercer argumento a array_walk(), tu función de callback lo recibe como un tercer parámetro:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products es ahora: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Aquí, $prefix se pasa como el tercer argumento a array_walk(), y el callback lo recibe como $category. De esta manera, puedes reutilizar la misma función callback con diferentes prefijos sin codificar de forma rígida ningún valor dentro de ella.
Desafío
FácilRecibirás dos entradas: una lista de nombres de productos separados por comas y un prefijo de categoría. La primera entrada contiene nombres de productos como una cadena en el formato laptop,mouse,keyboard,monitor, y la segunda entrada es un texto de prefijo de categoría (ejemplo: Electronics).
Lee ambas entradas, convierte los nombres de productos separados por comas en un array, crea una función de callback que añada el prefijo de categoría a cada nombre de producto en el formato "Category: ProductName", utiliza array_walk() con tu función de callback para modificar el array original directamente y muestra cada nombre de producto modificado en una línea separada.
Tu función de callback debe usar el parámetro &$value para modificar los elementos del array por referencia. La función debe concatenar el prefijo de categoría con dos puntos y un espacio, seguido del nombre del producto.
Formato de entrada:
- Primera línea: Nombres de productos separados por comas (ejemplo:
laptop,mouse,keyboard,monitor) - Segunda línea: Texto del prefijo de categoría (ejemplo:
Electronics)
Salida esperada: Cada nombre de producto modificado impreso en una línea separada en el formato Category: ProductName
Pruébalo tú mismo
<?php
// Lee los nombres de los productos separados por comas
$products_input = trim(fgets(STDIN));
// Lee el prefijo de la categoría
$category = trim(fgets(STDIN));
// Convierte la cadena separada por comas en un array
$products = explode(',', $products_input);
// TODO: Escribe tu código a continuación
// Crea una función de callback que modifique cada nombre de producto añadiendo el prefijo de la categoría
// Usa array_walk() con tu función de callback para modificar el array
// Muestra cada nombre de producto modificado en una línea separada
foreach ($products as $product) {
echo $product . "\n";
}
?>Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificación6Funciones de array de orden superior
Transformación con 'array_map''array_map' con funciones personalizadasFiltrado con 'array_filter''array_filter' con funciones personalizadasReducción con 'array_reduce'Recorrido con 'array_walk'Resumen: Procesamiento de datos