PHP 8.3.4 Released!

array_product

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

array_productErmittelt das Produkt der Werte eines Arrays

Beschreibung

array_product(array $array): int|float

array_product() gibt das Produkt aus den Werten eines Arrays zurück.

Parameter-Liste

array

Das Array.

Rückgabewerte

Gibt das Produkt als Integer oder Float zurück.

Changelog

Version Beschreibung
8.3.0 Wenn array-Werte nicht in Integer oder Float umgewandelt werden können, wird nun ein Fehler der Stufe E_WARNING ausgegeben. Zuvor wurden Arrays und Objekte ignoriert, während alle anderen Werte in Integer umgewandelt wurden. Außerdem werden Objekte, die eine numerische Umwandlung definieren (z. B. GMP), nicht mehr ignoriert, sondern umgewandelt.

Beispiele

Beispiel #1 array_product()-Beispiele

<?php

$a
= array(2, 4, 6, 8);
echo
"Produkt(a) = " . array_product($a) . "\n";
echo
"product(array()) = " . array_product(array()) . "\n";

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Produkt(a) = 384
product(array()) = 1

add a note

User Contributed Notes 7 notes

up
26
Andre D
17 years ago
This function can be used to test if all values in an array of booleans are TRUE.

Consider:

<?php

function outbool($test)
{
return (bool)
$test;
}

$check[] = outbool(TRUE);
$check[] = outbool(1);
$check[] = outbool(FALSE);
$check[] = outbool(0);

$result = (bool) array_product($check);
// $result is set to FALSE because only two of the four values evaluated to TRUE

?>

The above is equivalent to:

<?php

$check1
= outbool(TRUE);
$check2 = outbool(1);
$check3 = outbool(FALSE);
$check4 = outbool(0);

$result = ($check1 && $check2 && $check3 && $check4);

?>

This use of array_product is especially useful when testing an indefinite number of booleans and is easy to construct in a loop.
up
10
bsr dot anwar at gmail dot com
6 years ago
Here's how you can find a factorial of a any given number with help of range and array_product functions.

function factorial($num) {
return array_product(range(1, $num));
}

printf("%d", factorial(5)); //120
up
-1
biziclop
1 year ago
You can use array_product() to calculate the geometric mean of an array of numbers:

<?php
$a
= [ 1, 10, 100 ];
$geom_avg = pow( array_product( $a ), 1 / count( $a ));
// = 9.999999999999998 ≈ 10
?>
up
-1
Marcel G
13 years ago
You can use array_product to calculate the factorial of n:
<?php
function factorial( $n )
{
if(
$n < 1 ) $n = 1;
return
array_product( range( 1, $n ));
}
?>

If you need the factorial without having array_product available, here is one:
<?php
function factorial( $n )
{
if(
$n < 1 ) $n = 1;
for(
$p++; $n; ) $p *= $n--;
return
$p;
}
?>
up
-4
Jimmy PHP
9 years ago
array_product() can be used to implement a simple boolean AND search

<?php
$args
= array('first_name'=>'Bill','last_name'=>'Buzzard');
$values[] = array('first_name'=>'Brenda','last_name'=>'Buzzard');
$values[] = array('first_name'=>'Victor','last_name'=>'Vulture');
$values[] = array('first_name'=>'Bill','last_name'=>'Blue Jay');
$values[] = array('first_name'=>'Bill','last_name'=>'Buzzard');

$result = search_for($values,$args);
var_dump($result);exit;

function
search_for($array,$args) {
$results = array();
foreach (
$array as $row) {
$found = false;
$hits = array();
foreach (
$row as $k => $v) {
if (
array_key_exists($k,$args)) $hits[$k] = ($args[$k] == $v);
}

$found = array_product($hits);
if (!
in_array($row,$results) && true == $found) $results[] = $row;
}

return
$results;
}
?>

Output:

array (size=1)
0 =>
array (size=2)
'first_name' => string 'Bill' (length=4)
'last_name' => string 'Buzzard' (length=7)
up
-1
gergely dot lukacsy at streamnet dot hu
11 months ago
Just a little correction for Andre D's answer: "(bool) array_product($array);" is equivalent with the conjunction of each array elements of $array, UNLESS the provided array is empty in which case array_product() will return 1, which will translate to boolean TRUE.

To mitigate this, you should expand the function with an additional check:

<?php

$result
= !empty($check) && !!array_product($check);

?>
up
-8
pqpqpq at wanadoo dot nl
17 years ago
An observation about the _use_ of array_product with primes:

$a=$arrayOfSomePrimes=(2,3,11);
// 2 being the first prime (these days)

$codeNum=array_product($a); // gives 66 (== 2*3*11)

echo "unique product(\$a) = " . array_product($a) . "\n";

The 66 can (only) be split into its original primes,
which can be transformed into their place in the row of primes (2,3,5,7,11,13,17,19...) giving (1,2,3,4,5,6,7,8...)

The 66 gives the places {1,2,5} in the row of primes. The number "66" is unique as a code for {1,2,5}

So you can define the combination of table-columns {1,2,5} in "66". The bigger the combination, the more efficient in memory/transmission, the less in calculation.
To Top