1
resposta

Dúvida sobre o tipo do argumento passado para função array_reduce

Considerando o seguinte código:

function somaMedalhas(int $medalhasAcumuladas, int $medalhas): int {
    return $medalhasAcumuladas + $medalhas;
}

function somaTodasAsMedalhasDeTodosOsPaises (int $somaDeTodasAsMedalhas, array $pais): int {
    return $somaDeTodasAsMedalhas + array_reduce($pais['medalhas'], 'somaMedalhas', 0);
}

$somaTodasMedalhasDeTodosOsPaises = array_reduce($dados, 'somaTodasAsMedalhasDeTodosOsPaises', 0);

Na função somaMedalhas(), o segundo argumento $medalhas é um inteiro.

Mas $medalhas não seria um array com 3 chaves ouro, prata e bronze?

Na função somaTodasAsMedalhasDeTodosOsPaises() $pais é um array, com 2 chaves: pais e medalhas.

Eu meio que entendi mas não ficou bem entendido...

1 resposta

Fala Guilherme beleza?

Não realizei esse curo mas vou tentar te dar um help,

Se eu entendi bem você está confundindo array de medalhas com o parâmetro $medalhas do callback.

O array reduce sempre recebe um callback como parâmetro onde esse callback tem dois parâmetros: o inicial( ou o "anterior") e o próximo. No seu exemplo você tem o callback chamado de "somaMedalhas" onde o parâmetro "inicial" é o $medalhasAcumuladas e o parâmetro "próximo" é o $medalhas.

Inicialmente o parâmetro $somaMedalhas irá receber um valor padrão definido por você, que no exemplo foi 0. E o parâmetro $medalhas irá receber um item do array por vez.

Digamos que seu array tenha os valores [2, 3, 5], então ficará nesse fluxo:

->0 ($somaMedalhas) + 2 ($medalhas)

->2 ($somaMedalhas) + 3 ($medalhas)

->5 ($somaMedalhas) + 5 ($medalhas)

Retornando assim o valor de 10.