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 máximos ou combinar todos os elementos em um único resultado.
A função requer três parâmetros: o array a ser processado, uma função de callback que define como combinar os elementos e um valor inicial opcional. 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, então chama repetidamente addNumbers com o total acumulado e cada elemento do array. Este processo de acumulação continua até que todos os elementos sejam processados, deixando você com o valor reduzido final.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê receberá duas entradas: uma lista de números separados por vírgula 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 indicando a operação: S para soma, P para produto ou M para máximo.
Leia ambas as entradas, converta os números separados por vírgula 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): Soma todos os números (valor inicial: 0)P(Produto): Multiplica todos os números (valor inicial: 1)M(Máximo): Encontra o maior número (valor inicial: primeiro número no 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 de entrada:
- Primeira linha: Números separados por vírgula (exemplo:
5,10,15,20,25) - Segunda linha: Tipo de operação -
S,PouM(exemplo:S)
Saída esperada: Um único número representando o resultado da operação reduce
Folha de consulta
A função array_reduce() processa todos os elementos em um array para produzir um único valor, perfeita para calcular totais ou combinar elementos.
Ela requer três parâmetros: o array a ser processado, uma função de callback e um valor inicial opcional. O callback recebe o resultado acumulado (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
?>Use number_format($total, 2) para formatar resultados com 2 casas decimais.
Experimente você mesmo
<?php
// Ler a entrada
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Converter a string separada por vírgulas em um array de inteiros
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Escreva seu código abaixo
// Criar uma função de callback baseada no tipo de operação
// Usar array_reduce() com sua função de callback e o valor inicial apropriado
// Exibir 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 Dados