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.
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 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,PoM(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;
?>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 datosPractica por tu cuenta: Compilador de PHP online