我想获得这个数组的总和:
Array
(
[1] => 0
[2] => 1
[3] => Array
(
[0] => 1
[1] => 1
[2] => 1
)
[4] => 1
[5] => 0
)
在这种情况下,总和应该是5.我似乎无法让它工作。有人能帮助我吗?
编辑:
我尝试过使用array_sum(显然不能工作)和一个像这样的递归数组:
$array_obj = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$sum = 0;
foreach($array_obj as $key => $value) {
if($key == '3')
$sum += $value;
}
不知怎的,这会返回20;
答案 0 :(得分:2)
您可以结合使用array_walk_recursive()
并通过引用使用外部变量:
$sum = 0;
array_walk_recursive($array, function($number) use (&$sum) {
$sum += $number;
});
echo $sum;
如果数组的元素本身是一个数组,array_walk_recursive()
将遍历它。否则它会调用元素上的函数。
答案 1 :(得分:2)
一种选择是使用array_walk_recursive
$arr = $arr = array(0,1,array(1,1,1,),1,0,);
$sum = 0;
array_walk_recursive( $arr, function($i) use(&$sum){
$sum += $i;
});
$sum
将导致5
答案 2 :(得分:1)
递归来救援。
您可以编写一个泛型方法,处理任何深度级别的数组的求和。
示例:
$array = array(0, 1, 2, array(4, 5, array(7, 8)));
function sumArr($arr) {
$sum = 0;
foreach($arr as $v) {
if (is_array($v)) {
$sum += sumArr($v);
} else {
$sum += $v;
}
}
return $sum;
}
// prints 27 as intended
echo sumArr($array);
答案 3 :(得分:1)
以下代码适用于任何维数组:
$input = array(0,1,array(1,1,1),1,0);
function sum($arr){
$sum=0;
foreach($arr as $single){
if(is_array($single))
$sum+= sum($single);
else
$sum+=$single;
}
return $sum;
}
echo sum($input);
说明:上面的代码将按如下方式执行:
将返回最终结果。
答案 4 :(得分:1)
在您的尝试中,无需添加条件if($key == '3')
$array_obj = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$sum = 0;
foreach($array_obj as $key => $value) {
$sum += $value;
}
echo "sum : ".$sum;
您正在获得平面数组,如果条件限制添加其他键值而不是3
。你快到了。