有几种方法可以成功地对这些值求和:
使用:$array = [['user1' => 20], ['user2' => 30], 3 => ['user3' => 10]];
(所有方法的演示)
纯粹的基于函数的方法:
// reindex subarrays, isolate zero column, sum values
echo array_sum(array_column(array_map('array_values', $array), 0));
递归方法(简洁,但可以说是“矫枉过正”):
// visit each leafnode, increase the $sum ("modifiable" via &) tally
array_walk_recursive($array, function($v)use(&$sum){ $sum += $v; });
echo $sum;
一种语言构造方法(纯 foreach 循环):
$total = 0; // without this declaration, you will generate: "Notice: Undefined variable"
foreach ($array as $subarray) { // iterate outer array
foreach ($subarray as $v) { // iterate each inner array
$total += $v; // increase $total
}
}
echo $total;
以上所有解决方案都将输出60
.
ps 假设您在每个子数组中都有唯一的用户标识符,您可以将子数组与“splat 运算符”合并以生成一维数组,这将设置使用array_sum()
. (演示)
echo array_sum(array_merge(...$array));
// 60