PHP 开发者大会日本 2024

array_product

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

array_product计算数组中值的乘积

描述

array_product(数组 $array): 整数|浮点数

array_product() 返回数组中值的乘积。

参数

array

数组。

返回值

返回乘积,结果为整数或浮点数。

变更日志

版本 描述
8.3.0 现在当array中的值无法转换为整数浮点数时会发出E_WARNING警告。之前数组和对象会被忽略,其他值则强制转换为整数。此外,定义了数值转换的对象(例如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

添加注释

用户贡献注释 6 条注释

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 的用法在测试不确定数量的布尔值时特别有用,并且易于在循环中构建。
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
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);

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

<?php
$a
= [ 1, 10, 100 ];
$geom_avg = pow( array_product( $a ), 1 / count( $a ));
// = 9.999999999999998 ≈ 10
?>
Marcel G
14 年前
您可以使用 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;
}
?>
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;
}
?>

输出

数组 (大小:1)
0 =>
数组 (大小:2)
'first_name' => 字符串 'Bill' (长度:4)
'last_name' => 字符串 'Buzzard' (长度:7)
To Top