PHP - 如何获得多维数组的总和?

时间:2018-05-07 08:04:58

标签: php arrays recursion multidimensional-array sum

我想获得这个数组的总和:

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;

5 个答案:

答案 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

Doc:array_walk_recursive()

答案 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);

说明:上面的代码将按如下方式执行:

  1. 遍历数组的每个元素
  2. 检查当前元素是另一个数组还是简单数字。
  3. 如果当前元素是数组,请转到步骤1.否则总结。
  4. 将返回最终结果。

答案 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。你快到了。

Live Demo