最直接高效的方法是使用array_sum()函数,它可计算一维数组中所有数值元素的总和,自动将数字字符串转为数字,非数字元素视为0,空数组返回0;处理多维数组时需结合递归或array_walk_recursive等方法。

在PHP中,计算数组元素的总和,最直接、最优雅且效率最高的方法就是使用内置的
array_sum()
array_sum()
<?php // 示例1:简单的整数数组 $numbers = [1, 2, 3, 4, 5]; $sum = array_sum($numbers); echo "整数数组的总和是: " . $sum; // 输出: 整数数组的总和是: 15 echo "\n"; // 示例2:包含浮点数的数组 $prices = [10.5, 20.75, 5.25]; $totalPrice = array_sum($prices); echo "浮点数数组的总和是: " . $totalPrice; // 输出: 浮点数数组的总和是: 36.5 echo "\n"; // 示例3:空数组 $emptyArray = []; $emptySum = array_sum($emptyArray); echo "空数组的总和是: " . $emptySum; // 输出: 空数组的总和是: 0 echo "\n"; // 示例4:包含数字字符串的数组 // array_sum 会尝试将字符串转换为数字 $stringNumbers = ["10", "20", "30.5"]; $stringSum = array_sum($stringNumbers); echo "数字字符串数组的总和是: " . $stringSum; // 输出: 数字字符串数组的总和是: 60.5 echo "\n"; // 示例5:包含非数字字符串的数组 // 非数字字符串会被视为 0 $mixedArray = [1, "hello", 3, "world", 5]; $mixedSum = array_sum($mixedArray); echo "混合类型数组的总和是: " . $mixedSum; // 输出: 混合类型数组的总和是: 9 (1 + 0 + 3 + 0 + 5) ?>
从上面的例子可以看出,
array_sum()
0
array_sum()
array_sum()
这是一个非常关键的问题,也是我刚开始使用这个函数时经常会犯迷糊的地方。
array_sum()
立即学习“PHP免费学习笔记(深入)”;
具体来说:
"10"
"20.5"
array_sum()
"hello"
"apple"
array_sum()
0
true
1
false
0
null
0
0
E_WARNING
我的经验是,如果你不确定数组中是否会混入非数字或不希望参与求和的元素,最好在使用
array_sum()
array_filter()
is_numeric()
<?php
$data = [10, "20", "invalid", 30.5, true, null, "40a"];
// 过滤掉非数字元素,或者那些不能完全转换为数字的字符串
$filteredData = array_filter($data, function($value) {
return is_numeric($value);
});
$sum = array_sum($filteredData);
echo "过滤后的数组总和: " . $sum; // 输出: 过滤后的数组总和: 100.5 (10 + 20 + 30.5 + 1 + 0 + 0)
// 注意:is_numeric("40a") 会返回 false,所以 "40a" 被过滤掉了
?>这里
is_numeric()
is_numeric("40a")false
is_numeric(" 10 ")true
array_sum()
关于性能,我通常会这样考虑:对于PHP内置的函数,特别是那些用C语言实现的,它们的效率通常会比我们用PHP代码编写的等效逻辑高得多。
array_sum()
当处理一个包含数万甚至数十万元素的数组时,
array_sum()
我曾经在一些需要处理大量日志数据或统计报表的项目中测试过,手动
foreach
array_sum()
foreach
foreach
array_sum()
array_sum()
最常见的做法是编写一个递归函数来遍历多维数组,并在遍历过程中累加所有数字。
<?php
$multiDimensionalArray = [
1,
[2, 3, [4, 5]],
6,
["seven", 8.5],
[9, [10]]
];
function recursiveArraySum(array $arr): float
{
$total = 0.0;
foreach ($arr as $value) {
if (is_array($value)) {
// 如果是数组,则递归调用自身
$total += recursiveArraySum($value);
} elseif (is_numeric($value)) {
// 如果是数字(或可转换为数字),则累加
$total += (float)$value;
}
// 非数字且非数组的元素会被忽略
}
return $total;
}
$totalSum = recursiveArraySum($multiDimensionalArray);
echo "多维数组所有数字的总和: " . $totalSum; // 输出: 多维数组所有数字的总和: 49.5 (1+2+3+4+5+6+8.5+9+10)
echo "\n";
// 另一种方法,使用 array_walk_recursive 和闭包
$anotherMultiArray = [
10,
[20, 30, [40, 50]],
60,
["abc", 70.5],
[80, [90]]
];
$recursiveSum = 0;
array_walk_recursive($anotherMultiArray, function($item, $key) use (&$recursiveSum) {
if (is_numeric($item)) {
$recursiveSum += (float)$item;
}
});
echo "使用 array_walk_recursive 的总和: " . $recursiveSum; // 输出: 使用 array_walk_recursive 的总和: 450.5
?>我个人更倾向于使用递归函数,因为它逻辑清晰,易于理解和调试。
array_walk_recursive
use
array_sum()
以上就是如何在PHP中计算数组元素和?array_sum()函数的实际应用的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号