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.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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
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;
?>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