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);
// Resultado: 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.
Desafío
FácilRecibirá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,PoM(ejemplo:S)
Resultado esperado: Un solo número que represente el resultado de la operación reduce
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 callback basada en el tipo de operación
// Usar array_reduce() con tu función callback y el valor inicial apropiado
// Mostrar el resultado
echo $result;
?>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