PHP array_product(): Moltiplicare tutti gli elementi di un array
Scopri come PHP array_product() moltiplica ogni valore di un array in un unico prodotto, come gestisce float, array vuoti e stringhe.
La funzione PHP array_product() moltiplica ogni valore di un array tra loro e restituisce il numero risultante. È la controparte moltiplicativa di array_sum(): dove array_sum() somma gli elementi, array_product() li moltiplica. Usala ogni volta che hai bisogno di un prodotto cumulativo — ad esempio, il totale di prezzo × quantità, il fattore combinato di diverse percentuali, o un fattoriale.
Cosa tratta questa pagina
- La firma della funzione e il tipo restituito
- Un esempio di base e come viene costruito il risultato
- Come gestisce i float, gli array vuoti e le chiavi di un array
- L'insidia della conversione delle stringhe (cambiata in PHP 8)
- Un esempio pratico di "totale carrello" e link a funzioni correlate
Sintassi
array_product(array $array): int|floatarray_product() accetta un singolo argomento — l'array da moltiplicare — e restituisce un int o un float. Il tipo restituito dipende dai valori: se ogni elemento è un intero, il risultato è un int; se almeno un elemento è un float, il risultato è un float.
Esempio di base
Passa un array di numeri e array_product() restituisce il loro prodotto. Internamente parte da 1 (l'identità moltiplicativa) e moltiplica ogni elemento in un totale progressivo: 1 × 1 × 2 × 3 × 4 × 5 = 120.
Output:
120Lavorare con i float
Se almeno un elemento è un float, il risultato è un float. Questo rende array_product() comodo per applicare più tassi contemporaneamente.
<?php
$factors = [1.5, 2, 4];
echo array_product($factors); // 1.5 * 2 * 4
?>Output:
12Nota: l'aritmetica in virgola mobile non è esatta. Per le somme di denaro, preferisci i centesimi interi o una libreria di precisione come BCMath invece di moltiplicare direttamente i float.
L'array vuoto restituisce 1
Una sorpresa comune: un array vuoto restituisce 1, non 0. Questo è matematicamente corretto — il prodotto vuoto — moltiplicare niente lascia invariato il valore identità 1, allo stesso modo in cui sommare niente dà 0.
<?php
echo array_product([]); // 1
?>Output:
1Insidia: stringhe non numeriche
array_product() si aspetta valori numerici. Le stringhe numeriche come "2" vengono convertite automaticamente in numeri, quindi ["1", "2", "3"] moltiplica a 6. Ma una stringa non numerica come "Q" non può essere convertita — e il comportamento è cambiato tra le versioni di PHP:
- PHP 8.0+ lancia un
TypeError/avviso ("Multiplication is not supported on type string") e tratta il valore come0, quindi il prodotto diventa0. - PHP 7 e precedenti trattavano silenziosamente le stringhe non numeriche come
0, producendo anch'essi0.
In entrambi i casi il prodotto finale crolla a 0, quindi valida o filtra i dati di input prima se possono contenere stringhe non numeriche.
Output:
0Le chiavi vengono ignorate
array_product() moltiplica solo i valori — le chiavi, siano esse numeriche o string, non hanno alcun ruolo. Ciò significa che funziona allo stesso modo su un array associativo e su uno indicizzato.
<?php
$cart = ['price' => 9.99, 'qty' => 3];
echo array_product($cart); // 9.99 * 3 = 29.97
?>Output:
29.97Esempio pratico: totale riga carrello
Un utilizzo tipico è ridurre alcuni numeri correlati a un unico valore. Qui array_product() trasforma un prezzo unitario, una quantità e un fattore di sconto nel totale finale della riga con una singola chiamata.
<?php
$unitPrice = 20;
$quantity = 3;
$discount = 0.9; // 10% off
$lineTotal = array_product([$unitPrice, $quantity, $discount]);
echo $lineTotal; // 20 * 3 * 0.9
?>Output:
54Funzioni correlate
array_sum()— somma gli elementi invece di moltiplicarli.array_reduce()— elabora un array con qualsiasi operazione personalizzata quando hai bisogno di più di un semplice prodotto.array_map()— trasforma i valori prima (ad es. estrae un campo) prima di moltiplicare.array_filter()— rimuovi le voci indesiderate prima di passare l'array.
Per un ripasso sugli array stessi, consulta PHP Arrays.
Riepilogo
array_product() è un modo rapido e leggibile per moltiplicare ogni valore di un array in un unico numero. Ricorda i tre comportamenti che colgono di sorpresa: il tipo restituito è un float non appena un elemento è un float, un array vuoto restituisce 1, e le stringhe non numeriche trascinano l'intero risultato a 0. Tienilo a mente e sarà uno strumento affidabile per i calcoli di prodotto cumulativo.