Menu
CoddyTech

Reducción con 'array_reduce'

Parte de la sección Lógica y Flujo del Journey de PHP de Coddy. Lección 43 de 68.

La función array_reduce() adopta un enfoque diferente al de array_map() y array_filter(). En lugar de devolver una nueva matriz, procesa todos los elementos de una matriz para producir un único valor. Esto la hace perfecta para operaciones como calcular totales, encontrar máximos o combinar todos los elementos en un solo resultado.

La función toma el arreglo que se va a procesar y una función de devolución de llamada que define cómo combinar los elementos, además de un tercer parámetro opcional: el valor inicial. La función de devolución de llamada recibe dos parámetros: el resultado acumulado (llamado «acumulador») y el elemento actual del arreglo.

<?php
function addNumbers($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Resultado: 15
?>

En este ejemplo, la función comienza con un valor inicial de 0 y después llama repetidamente a addNumbers con el total acumulado y cada elemento del arreglo. Este proceso de acumulación continúa hasta que se procesan todos los elementos, y te deja el valor reducido final.

challenge icon

Desafío

Fácil

Recibirás dos entradas: una lista de números separados por comas y un tipo de operación. La primera entrada contiene números como una cadena en el formato 5,10,15,20,25, y la segunda entrada es un solo carácter que indica la operación: S para la suma, P para el producto o M para el máximo.

Lee ambas entradas, convierte los números separados por comas en un arreglo de enteros, crea una función de devolución de llamada personalizada que realice la operación especificada, usa array_reduce() con tu función de devolución de llamada y un valor inicial apropiado para procesar todos los números y obtener un único resultado, e imprime el resultado final.

Detalles de las operaciones:

  • S (Suma): Suma todos los números (valor inicial: 0)
  • P (Producto): Multiplica todos los números (valor inicial: 1)
  • M (Máximo): Encuentra el número más grande (valor inicial: el primer número del arreglo o un número muy pequeño)

Tu función de devolución de llamada debe aceptar dos parámetros: el resultado acumulado (carry) y el elemento actual del arreglo (item), y luego devolver el valor acumulado actualizado según el tipo de operación.

Formato de entrada:

  • Primera línea: Números separados por comas (por ejemplo: 5,10,15,20,25)
  • Segunda línea: Tipo de operación: S, P o M (por ejemplo: S)

Salida esperada: Un único número que representa el resultado de la operación reduce

Pruébalo tú mismo

<?php
// Lee la entrada
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// Convierte la cadena separada por comas en un array de enteros
$numbers = array_map('intval', explode(',', $numbers_input));

// TODO: Escribe tu código a continuación
// Crea una función de callback según el tipo de operación
// Usa array_reduce() con tu función de callback y un valor inicial adecuado


// Muestra el resultado
echo $result;
?>
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