PHP array_product(): Multiplicar Todos os Elementos de um Array
Saiba como o PHP array_product() multiplica todos os valores de um array em um único produto, e como lida com floats, arrays vazios e strings.
A função PHP array_product() multiplica todos os valores de um array e retorna o número resultante. É o equivalente multiplicativo de array_sum(): enquanto array_sum() soma os elementos, array_product() os multiplica. Recorra a ela sempre que precisar de um produto acumulado — por exemplo, o total de preço × quantidade, o fator combinado de várias porcentagens ou um fatorial.
O que esta página aborda
- A assinatura da função e o tipo de retorno
- Um exemplo básico e como o resultado é construído
- Como ela lida com floats, arrays vazios e as chaves de um array
- O problema com strings não numéricas (que mudou no PHP 8)
- Um exemplo prático de "total do carrinho" e links para funções relacionadas
Sintaxe
array_product(array $array): int|floatarray_product() recebe um único argumento — o array a multiplicar — e retorna um int ou um float. O tipo de retorno depende dos valores: se todos os elementos forem inteiros, o resultado é um int; se algum elemento for float, o resultado é um float.
Exemplo básico
Passe um array de números e array_product() retorna o produto deles. Internamente, começa do 1 (o elemento neutro da multiplicação) e multiplica cada elemento em um total acumulado: 1 × 1 × 2 × 3 × 4 × 5 = 120.
Saída:
120Trabalhando com floats
Se algum elemento for float, o resultado também será float. Isso torna o array_product() conveniente para aplicar várias taxas de uma só vez.
<?php
$factors = [1.5, 2, 4];
echo array_product($factors); // 1.5 * 2 * 4
?>Saída:
12Nota: a aritmética de ponto flutuante não é exata. Para valores monetários, prefira centavos inteiros ou uma biblioteca de precisão como o BCMath em vez de multiplicar floats diretamente.
Array vazio retorna 1
Uma surpresa comum: um array vazio retorna 1, não 0. Esse é o matematicamente correto produto vazio — multiplicar nada deixa o valor identidade 1 intacto, da mesma forma que somar nada resulta em 0.
<?php
echo array_product([]); // 1
?>Saída:
1Armadilha: strings não numéricas
array_product() espera valores numéricos. Strings numéricas como "2" são convertidas para números automaticamente, então ["1", "2", "3"] é multiplicado resultando em 6. Mas uma string não numérica como "Q" não pode ser convertida — e o comportamento mudou entre versões do PHP:
- PHP 8.0+ gera um
TypeError/aviso ("Multiplication is not supported on type string") e trata o valor como0, fazendo o produto se tornar0. - PHP 7 e anteriores tratavam strings não numéricas silenciosamente como
0, também resultando em0.
De qualquer forma, o produto final colapsa para 0, portanto valide ou filtre a entrada antes, caso ela possa conter strings não numéricas.
Saída:
0Chaves são ignoradas
array_product() multiplica apenas os valores — as chaves, sejam numéricas ou string, não têm papel algum. Isso significa que funciona da mesma forma em um array associativo e em um indexado.
<?php
$cart = ['price' => 9.99, 'qty' => 3];
echo array_product($cart); // 9.99 * 3 = 29.97
?>Saída:
29.97Exemplo prático: total de linha do carrinho
Um uso típico é condensar alguns números relacionados em um único valor. Aqui, array_product() transforma um preço unitário, quantidade e um fator de desconto no total final de uma linha em uma única chamada.
<?php
$unitPrice = 20;
$quantity = 3;
$discount = 0.9; // 10% off
$lineTotal = array_product([$unitPrice, $quantity, $discount]);
echo $lineTotal; // 20 * 3 * 0.9
?>Saída:
54Funções relacionadas
array_sum()— soma os elementos em vez de multiplicá-los.array_reduce()— percorre um array com qualquer operação personalizada quando você precisa de mais do que um simples produto.array_map()— transforma os valores primeiro (por exemplo, extrai um campo) antes de multiplicar.array_filter()— remove entradas indesejadas antes de passar o array.
Para uma revisão sobre arrays em si, veja PHP Arrays.
Conclusão
array_product() é uma forma rápida e legível de multiplicar todos os valores de um array em um único número. Lembre-se dos três comportamentos que costumam surpreender: o tipo de retorno é float assim que um elemento for float, um array vazio retorna 1, e strings não numéricas arrastam o resultado inteiro para 0. Tenha isso em mente e ela será uma ferramenta confiável para cálculos de produto acumulado.