PHP 8.4.2 Released!

array_product

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

array_product计算数组中所有值的乘积

说明

array_product(array $array): int|float

array_product() 以整数或浮点数返回一个数组中所有值的乘积。

参数

array

这个数组。

返回值

以整数或浮点数返回一个数组中所有值的乘积。

更新日志

版本 说明
8.3.0 array 值不能转换为 intfloat 时,现在会发出 E_WARNING。之前会忽略 arrayobject,而其它的值会转换为 int。此外,现在也会转换定义了数字转换的对象(比如 GMP)而不是忽略它。

示例

示例 #1 array_product() 示例

<?php

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

?>

以上示例会输出:

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

添加备注

用户贡献的备注 5 notes

up
29
Andre D
18 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
12
bsr dot anwar at gmail dot com
7 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
gergely dot lukacsy at streamnet dot hu
1 year 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
0
biziclop
2 years 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
0
Marcel G
14 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;
}
?>
To Top