如何在php中获取数据数组的总和

时间:2018-07-21 09:28:02

标签: php arrays sum

我正在尝试获取数据数组的总和。

array(499) { [0]=> array(1) { ["ping_val"]=> string(2) "19" } [1]=> array(1) { ["ping_val"]=> string(2) "20" } [2]=> array(1) { ["ping_val"]=> string(2) "15" } [3]=> array(1) { ["ping_val"]=> string(2) "19" } [4]=> array(1) { ["ping_val"]=> string(2) "20" } [5]=> array(1) { ["ping_val"]=> string(2) "20" } [6]=> array(1) { ["ping_val"]=> string(2) "20" } [7]=> array(1) { ["ping_val"]=> string(2) "19" } [8]=> array(1) { ["ping_val"]=> string(2) "19" } [9]=> array(1) { ["ping_val"]=> string(2) "20" } [10]=> array(1) { ["ping_val"]=> string(2) "21" } [11]=> array(1) { ["ping_val"]=> string(2) "21" } [12]=> array(1) { ["ping_val"]=> string(2) "21" } [13]=> array(1) { ["ping_val"]=> string(2) "22" } [14]=> array(1) { ["ping_val"]=> string(2) "20" } [15]=> array(1) { ["ping_val"]=> string(2) "19" } [16]=> array(1) { ["ping_val"]=> string(2) "20" } [17]=> array(1) { ["ping_val"]=> string(2) "20" } [18]=> array(1) { ["ping_val"]=> string(2) "20" } [19]=> array(1) { ["ping_val"]=> string(2) "19" } [20]=> array(1) { ["ping_val"]=> string(2) "20" } [21]=> array(1) { ["ping_val"]=> string(2) "19" } [22]=> array(1) { ["ping_val"]=> string(2) "20" } [23]=> array(1) { ["ping_val"]=> string(2) "21" } [24]=> array(1) { ["ping_val"]=> string(2) "20" } [25]=> array(1) { ["ping_val"]=> string(2) "20" } [26]=> array(1) { ["ping_val"]=> string(2) "20" } [27]=> array(1) { ["ping_val"]=> string(2) "20" } [28]=> array(1) { ["ping_val"]=> string(2) "20" }....................[498]=> array(1) { ["ping_val"]=> string(2) "19" }}

下面是我如何获取ping_val

的总和
 foreach ($arr as $k=>$subArray) {
        foreach ($subArray as $id=>$value) {
            $sumArray[$id]+=$value;
        }
    }

运行代码时,我遇到了错误。

  

未定义的索引:行$ sumArray [$ id] + = $ value; ping_val;

如何摆脱这个错误?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您收到该消息,因为该密钥尚未存在于您要写入的数组中。您可以先检查数组中的键是否存在:

$sumArray = [];
foreach ($arr as $k=>$subArray) {
    foreach ($subArray as $id=>$value) {
        if (!array_key_exists('ping_val', $sumArray)) {
            $sumArray['ping_val'] = $value;
            continue;
        }

        $sumArray[$id]+=$value;
    }
}
var_dump($sumArray);

这将为您提供:

array(1) {
      ["ping_val"]=>
      int(39)
    }

Demo

您还可以将array_columnarray_sum结合使用:

$arr = [
    [
        "ping_val" => "19"
    ],
    [
        "ping_val" => "20"
    ]
];

$sum = array_sum(array_column($arr, 'ping_val'));
echo $sum; // 39

Demo

答案 1 :(得分:1)

  

这是问题所在的解释。
  “正确的解决方案”由“第四只鸟”发布。
  尽管此代码也可行,但我认为您应该选择第四只鸟的答案。

您尚未在sumarray中创建数组项“ ping_val”。
所以才得到通知。
您的代码说,向不存在的内容中添加某些内容,而不存在的内容就是问题所在。

一种解决方案是在循环之前创建数组项:

$sumArray['ping_val'] = 0; // this creates a 0 ping value and anything added will not create an notice.
foreach ($arr as $k=>$subArray) {
    foreach ($subArray as $id=>$value) {
        $sumArray[$id]+=$value;
    }
}


相同代码的简单版本是:

$sumArray['ping_val'] = 0; // this creates a 0 ping value and anything added will not create an notice.
foreach ($arr as $k=>$subArray) {
    $sumArray['ping_val']+=$subArray['ping_val'];
}

这只会循环数组的第一级。
在这种情况下,这就是我们所需要的,因为我们知道我们需要子数组中的“ ping_val”。