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

添加说明

用户贡献的说明 7 说明

27
Andre D
18 年前
此函数可用于测试布尔值数组中的所有值是否都为 TRUE。

考虑

<?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 被设置为 FALSE 因为只有四个值中的两个计算为 TRUE

?>

以上等同于

<?php

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

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

?>

这种 array_product 的用法在测试不定数量的布尔值时特别有用,并且很容易在循环中构建。
10
bsr dot anwar at gmail dot com
7 年前
以下是如何使用 range 和 array_product 函数找到任何给定数字的阶乘。

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

printf("%d", factorial(5)); //120
0
gergely dot lukacsy at streamnet dot hu
1 年前
对 Andre D 答案的稍微修正:"(bool) array_product($array);" 等同于 $array 中每个数组元素的合取,除非提供的数组为空,在这种情况下 array_product() 将返回 1,这将转换为布尔值 TRUE。

为了缓解这种情况,您应该使用额外的检查扩展函数

<?php

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

?>
0
biziclop
1 年前
您可以使用 array_product() 来计算一组数字的几何平均值

<?php
$a
= [ 1, 10, 100 ];
$geom_avg = pow( array_product( $a ), 1 / count( $a ));
// = 9.999999999999998 ≈ 10
?>
-1
Marcel G
13 年前
您可以使用 array_product 来计算 n 的阶乘
<?php
function factorial( $n )
{
if(
$n < 1 ) $n = 1;
return
array_product( range( 1, $n ));
}
?>

如果您需要在没有 array_product 的情况下计算阶乘,这里有一个
<?php
function factorial( $n )
{
if(
$n < 1 ) $n = 1;
for(
$p++; $n; ) $p *= $n--;
return
$p;
}
?>
-4
Jimmy PHP
10 年前
array_product() 可用于实现简单的布尔 AND 搜索

<?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;
}
?>

输出

array (size=1)
0 =>
array (size=2)
'first_name' => string 'Bill' (length=4)
'last_name' => string 'Buzzard' (length=7)
-8
pqpqpq at wanadoo dot nl
17 年前
关于使用 _array_product_ 和素数的观察

$a=$arrayOfSomePrimes=(2,3,11);
// 2 是第一个素数(现在)

$codeNum=array_product($a); // 结果为 66 (== 2*3*11)

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

66 可以(只能)分解成其原始素数,
可以将其转化为其在素数序列中的位置(2,3,5,7,11,13,17,19...),得到 (1,2,3,4,5,6,7,8...)

66 给出素数序列中的位置 {1,2,5}。数字“66”作为 {1,2,5} 的代码是唯一的

因此,您可以使用“66”定义表格列的组合 {1,2,5}。组合越大,内存/传输效率越高,计算量越小。
To Top