array_sum
(PHP 4 >= 4.0.4, PHP 5)
array_sum — Вычисляет сумму значений массива
Список параметров
-
array
-
Входной массив.
Возвращаемые значения
Возвращает сумму значений в виде integer или float.
Список изменений
Версия | Описание |
---|---|
4.2.1 | PHP более ранних, чем 4.2.1, версий модифицировал переданный в качестве аргумента массив и конвертировал строки в числа (что в большинстве случаев означало конвертирование в 0, в зависимости от их значения). |
Примеры
Пример #1 Пример использования array_sum()
<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";
?>
Результат выполнения данного примера:
sum(a) = 20 sum(b) = 6.9
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Массивы
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_key_exists
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- each
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
Коментарии
array_sum converts strings to integer and array_sum(2,'2') returns 4.
I had no idea.
If you want to calculate the sum in multi-dimensional arrays:
<?php
function array_multisum(array $arr): float {
$sum = array_sum($arr);
foreach($arr as $child) {
$sum += is_array($child) ? array_multisum($child) : 0;
}
return $sum;
}
?>
Example:
<?php
$data =
[
'a' => 5,
'b' =>
[
'c' => 7,
'd' => 3
],
'e' => 4,
'f' =>
[
'g' => 6,
'h' =>
[
'i' => 1,
'j' => 2
]
]
];
echo array_multisum($data);
//output: 28
?>
<?php
//you can also sum multidimentional arrays like this;
function arraymultisum(array $arr){
$sum=null;
foreach($arr as $child){
$sum+=is_array($child) ? arraymultisum($child):$child;
}
return $sum;
}
echo arraymultisum(array(1,4,5,[1,5,8,[4,5,7]]));
//Answer Will be
//40
?>
Notably the function converts strings to float and ignores strings if they are not convertable:
<?php
$a = array("String", 2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("12.3456", 2, 4, 6, 8);
echo "sum(b) = " . array_sum($b) . "\n";
?>
sum(a) = 20
sum(b) = 32.3456
array_sum() doesn't "ignore strings if they are not convertible", it converts them to zero. array_product() does the same thing, where the difference between "ignoring" and "converting to zero" is much more obvious.
If you have a case where your array has int in strings, it sums them up as if there were only int in the array!
function sum_mix($a)
{
return array_sum($a);
}
var_dump(sum_mix([9, 3, '7', '3']));
Response will be int(22)