Menu
Coddy logo textTech

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 array nuevo con valores transformados, array_walk() modifica directamente el array original aplicando una función de devolución de llamada a cada elemento en su lugar.

Esta función es especialmente útil cuando quieres cambiar el array existente sin crear una copia. La función de devolución de llamada que proporcionas recibe cada elemento del array por referencia, lo que te permite modificar directamente los valores originales.

<?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"]
?>

Observa cómo la función de callback utiliza &$value para recibir el elemento del array por referencia. Esto permite que la función modifique directamente el elemento original del array. El segundo parámetro $key proporciona acceso a la clave del elemento actual, aunque no siempre es necesario para transformaciones sencillas.

array_walk() también admite un tercer argumento opcional que te permite pasar datos adicionales directamente a tu función de devolución de llamada. Esto resulta útil cuando tu 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 devolución de llamada lo recibe como tercer parámetro:

<?php
function addCategory(&$value, $key, $category) {
    $value = $category . ": " . $value;
}

$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>

Aquí, $prefix se pasa como tercer argumento a array_walk(), y la función de devolución de llamada lo recibe como $category. De esta manera, puedes reutilizar la misma función de devolución de llamada con diferentes prefijos sin codificar ningún valor directamente en ella.

challenge icon

Desafío

Fácil

Recibirá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 con 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 con el formato "Category: ProductName", usa array_walk() con tu función de callback para modificar directamente el array original e imprime cada nombre de producto modificado en una línea independiente.

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 de prefijo de categoría (ejemplo: Electronics)

Salida esperada: Cada nombre de producto modificado se imprime en una línea independiente con el formato Category: ProductName

Pruébalo tú mismo

<?php
// Leer los nombres de 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 debajo
// Crear una función callback que modifique cada nombre de producto añadiendo el prefijo de la categoría
// Usar array_walk() con tu función callback para modificar el array


// Mostrar cada nombre de producto modificado en una línea separada
foreach ($products as $product) {
    echo $product . "\n";
}
?>
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de PHP online