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 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.

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 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";
}
?>
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