Menu
Coddy logo textTech

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 un nuevo array, procesa todos los elementos de un array 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 requiere tres parámetros: el array a procesar, una función de callback que define cómo combinar los elementos y un valor inicial opcional. La función de callback recibe dos parámetros: el resultado acumulado (llamado el "carry") y el elemento actual del array.

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

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

En este ejemplo, la función comienza con un valor inicial de 0, luego llama repetidamente a addNumbers con el total acumulado y cada elemento del array. Este proceso de acumulación continúa hasta que se procesan todos los elementos, dejándote con el valor reducido final.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

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 suma, P para producto o M para el máximo.

Lee ambas entradas, convierte los números separados por comas en un array de enteros, crea una función de callback personalizada que realice la operación especificada, utiliza array_reduce() con tu función de callback y un valor inicial apropiado para procesar todos los números en un solo resultado, y muestra el resultado final.

Detalles de la operación:

  • 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 array o un número muy pequeño)

Tu función de callback debe aceptar dos parámetros: el resultado acumulado (carry) y el elemento actual del array (item), luego devolver el valor acumulado actualizado basado en el tipo de operación.

Formato de entrada:

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

Resultado esperado: Un solo número que represente el resultado de la operación reduce

Hoja de referencia

La función array_reduce() procesa todos los elementos de un array para producir un único valor, ideal para calcular totales o combinar elementos.

Requiere tres parámetros: el array a procesar, una función de callback y un valor inicial opcional. El callback recibe el resultado acumulado (carry) y el elemento actual del array.

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

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

Utilice number_format($total, 2) para formatear los resultados con 2 decimales.

Pruébalo tú mismo

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

// Convertir 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
// Crear una función de callback basada en el tipo de operación
// Usar array_reduce() con tu función de callback y el valor inicial apropiado


// Imprimir 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