PHP array_product(): Multiplicar todos los elementos de un array
Aprende cómo PHP array_product() multiplica cada valor de un array en un solo producto, y cómo maneja flotantes, arrays vacíos y strings.
La función PHP array_product() multiplica todos los valores de un array y devuelve el número resultante. Es la contraparte multiplicativa de array_sum(): donde array_sum() suma los elementos, array_product() los multiplica. Úsala cuando necesites un producto acumulado — por ejemplo, el total de precio × cantidad, el factor combinado de varios porcentajes, o un factorial.
Qué cubre esta página
- La firma de la función y el tipo de retorno
- Un ejemplo básico y cómo se construye el resultado
- Cómo maneja flotantes, arrays vacíos y las claves de un array
- El problema de la conversión de strings (que cambió en PHP 8)
- Un ejemplo práctico de "total del carrito" y enlaces a funciones relacionadas
Sintaxis
array_product(array $array): int|floatarray_product() acepta un único argumento — el array a multiplicar — y devuelve un int o un float. El tipo de retorno depende de los valores: si todos los elementos son enteros, el resultado es un int; si algún elemento es un float, el resultado es un float.
Ejemplo básico
Pasa un array de números y array_product() devuelve su producto. Internamente comienza desde 1 (el elemento neutro de la multiplicación) y multiplica cada elemento en un total acumulado: 1 × 1 × 2 × 3 × 4 × 5 = 120.
Salida:
120Trabajando con flotantes
Si algún elemento es un float, el resultado es un float. Esto hace que array_product() sea conveniente para aplicar varias tasas a la vez.
<?php
$factors = [1.5, 2, 4];
echo array_product($factors); // 1.5 * 2 * 4
?>Salida:
12Nota: la aritmética de punto flotante no es exacta. Para dinero, prefiere centavos enteros o una librería de precisión como BCMath en lugar de multiplicar flotantes directamente.
El array vacío devuelve 1
Una sorpresa común: un array vacío devuelve 1, no 0. Este es el producto vacío matemáticamente correcto — multiplicar nada deja el valor identidad 1 intacto, de la misma manera en que sumar nada da 0.
<?php
echo array_product([]); // 1
?>Salida:
1Problema: strings no numéricos
array_product() espera valores numéricos. Los strings numéricos como "2" se convierten a números automáticamente, por lo que ["1", "2", "3"] multiplica a 6. Pero un string no numérico como "Q" no puede convertirse — y el comportamiento cambió entre versiones de PHP:
- PHP 8.0+ lanza un
TypeError/advertencia ("Multiplication is not supported on type string") y trata el valor como0, por lo que el producto se convierte en0. - PHP 7 y anteriores trataban silenciosamente los strings no numéricos como
0, produciendo también0.
De cualquier manera, el producto final colapsa a 0, así que valida o filtra tu entrada primero si puede contener strings no numéricos.
Salida:
0Las claves se ignoran
array_product() multiplica solo los valores — las claves, ya sean numéricas o string, no intervienen. Eso significa que funciona igual en un array asociativo que en uno indexado.
<?php
$cart = ['price' => 9.99, 'qty' => 3];
echo array_product($cart); // 9.99 * 3 = 29.97
?>Salida:
29.97Ejemplo práctico: total de línea del carrito
Un uso típico es reducir varios números relacionados a una sola cifra. Aquí array_product() convierte un precio unitario, la cantidad y un factor de descuento en el total de línea final con una sola llamada.
<?php
$unitPrice = 20;
$quantity = 3;
$discount = 0.9; // 10% off
$lineTotal = array_product([$unitPrice, $quantity, $discount]);
echo $lineTotal; // 20 * 3 * 0.9
?>Salida:
54Funciones relacionadas
array_sum()— suma los elementos en lugar de multiplicarlos.array_reduce()— reduce un array con cualquier operación personalizada cuando necesitas más que un simple producto.array_map()— transforma los valores primero (por ejemplo, extrae un campo) antes de multiplicar.array_filter()— elimina las entradas no deseadas antes de pasar el array.
Para un repaso sobre los arrays en sí, consulta PHP Arrays.
Conclusión
array_product() es una forma rápida y legible de multiplicar todos los valores de un array en un solo número. Recuerda los tres comportamientos que suelen sorprender: el tipo de retorno es un float en cuanto un elemento es float, un array vacío devuelve 1, y los strings no numéricos reducen todo el resultado a 0. Teniendo esto en cuenta, es una herramienta confiable para cálculos de producto acumulado.