Reduzindo com 'array_reduce'
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy. Lição 43 de 68.
A função array_reduce() adota uma abordagem diferente de array_map() e array_filter(). Em vez de retornar um novo array, ela processa todos os elementos de um array para produzir um único valor. Isso a torna perfeita para operações como calcular totais, encontrar valores máximos ou combinar todos os elementos em um único resultado.
A função recebe o array a ser processado e uma função de callback que define como combinar os elementos, além de um terceiro parâmetro opcional: o valor inicial. A função de callback recebe dois parâmetros: o resultado acumulado (chamado de "carry") e o elemento atual do array.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Resultado: 15
?>Neste exemplo, a função começa com um valor inicial de 0 e, em seguida, chama repetidamente addNumbers com o total acumulado e cada elemento do array. Esse processo de acumulação continua até que todos os elementos sejam processados, deixando você com o valor final reduzido.
Desafio
FácilVocê receberá duas entradas: uma lista de números separados por vírgulas e um tipo de operação. A primeira entrada contém números como uma string no formato 5,10,15,20,25, e a segunda entrada é um único caractere que indica a operação: S para soma, P para produto ou M para máximo.
Leia as duas entradas, converta os números separados por vírgulas em um array de inteiros, crie uma função de callback personalizada que execute a operação especificada, use array_reduce() com sua função de callback e um valor inicial apropriado para processar todos os números em um único resultado e imprima o resultado final.
Detalhes da operação:
S(Soma): Some todos os números (valor inicial: 0)P(Produto): Multiplique todos os números (valor inicial: 1)M(Máximo): Encontre o maior número (valor inicial: o primeiro número do array ou um número muito pequeno)
Sua função de callback deve aceitar dois parâmetros: o resultado acumulado (carry) e o elemento atual do array (item), e então retornar o valor acumulado atualizado com base no tipo de operação.
Formato da entrada:
- Primeira linha: Números separados por vírgulas (exemplo:
5,10,15,20,25) - Segunda linha: Tipo de operação —
S,PouM(exemplo:S)
Saída esperada: Um único número que representa o resultado da operação de redução
Experimente você mesmo
<?php
// Leia a entrada
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Converta a string separada por vírgulas em um array de números inteiros
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Escreva seu código abaixo
// Crie uma função de callback com base no tipo de operação
// Use array_reduce() com sua função de callback e um valor inicial apropriado
// Exiba o resultado
echo $result;
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard6Funções de Ordem Superior para Arrays
Transformando com 'array_map''array_map' com Funções PersonalizadasFiltrando com 'array_filter''array_filter' com Funções PersonalizadasReduzindo com 'array_reduce'Percorrendo com 'array_walk'Recapitulação: Processamento de DadosPratique por conta própria: Compilador de PHP online