如何计算数组值的总和

时间:2016-06-22 10:29:43

标签: php arrays

我有一个数组,我用这个函数迭代它的前7个值:

function clicksLast7Days($data)
        {
            $path = $data->data->data->clicks;
            $num_loops = 0;
            foreach ($path as $key => $item){
                $num_loops++;
                if($num_loops > 7) break;
                if ($key >= 0) {
                $array[] = $item->clicks;
                }     
            }
           return json_encode($array);   
        }

数组的结构(如果有帮助)是:

["data"]=>
  object(stdClass)#212 (3) {
    ["status_code"]=>
    int(200)
    ["data"]=>
    object(stdClass)#211 (3) {
      ["days"]=>
      int(30)
      ["total_clicks"]=>
      int(6)
      ["clicks"]=>
      array(30) {
        [0]=>
        object(stdClass)#215 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1466395200)
        }
        [1]=>
        object(stdClass)#216 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1466308800)
        }
        [2]=>
        object(stdClass)#217 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1466222400)
        }
        [3]=>
        object(stdClass)#218 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1466136000)
        }
        [4]=>
        object(stdClass)#219 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1466049600)
        }
        [5]=>
        object(stdClass)#220 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1465963200)
        }
        [6]=>
        object(stdClass)#221 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1465876800)
        }
        [7]=>
        object(stdClass)#222 (2) {
          ["clicks"]=>
          int(0)
          ["day_start"]=>
          int(1465790400)
        }

问题是通过使用我的函数我得到一个元素数组: [0,0,0,0,0,0,0]。但我想要的是获得它们的总和(在这种情况下是0),而不是数组,只是一个数字。

1 个答案:

答案 0 :(得分:1)

$clicksArray = $data->data->data->clicks;
$sum = array_sum(
    array_map(
        $clicksArray, 
        function($clickElement) {
            return $clickElement->clicks;
        }
    )
);

这是什么意思?

  • array_sum将对某个数组的所有值求和。更多信息here

  • array_map将在应用函数后返回数组的所有元素(因此,基本上在这里,我们只返回clicks属性