Menu
Coddy logo textTech

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.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Você 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, P ou M (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;
?>
quiz iconTeste seus conhecimentos

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