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 especialmente ú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 ahora es: ["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 acepta un tercer argumento opcional: datos adicionales que se pasan directamente a su callback como un tercer parámetro. Esto es útil cuando su transformación depende de un valor definido fuera del array.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items ahora es: ["Item: apple", "Item: banana", "Item: orange"]
?>Aquí, la cadena
"Item: " se pasa como el tercer argumento a array_walk() y se recibe como $prefix dentro del callback. Esto le permite reutilizar el mismo callback con diferentes valores adicionales.Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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, e imprime 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
Hoja de referencia
La función array_walk() modifica el array original directamente aplicando una función de callback a cada elemento in-situ, a diferencia de array_map() que crea un nuevo array.
La función de callback recibe cada elemento del array por referencia usando &$value, lo que permite la modificación directa de los valores originales. El segundo parámetro $key proporciona acceso a la clave del elemento actual.
array_walk() también acepta un tercer argumento opcional: datos adicionales que se pasan al callback como un tercer parámetro. Esto es útil cuando su callback necesita información adicional para procesar cada elemento.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
// Using the optional third argument (extra data):
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits is now: ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>Pruébalo tú mismo
<?php
// Leer los nombres de los productos separados por comas
$products_input = trim(fgets(STDIN));
// Leer el prefijo de la categoría
$category = trim(fgets(STDIN));
// Convertir 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
// Imprimir 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