我正在尝试获取数据数组的总和。
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;
如何摆脱这个错误?
任何帮助将不胜感激。
答案 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)
}
您还可以将array_column与array_sum结合使用:
$arr = [
[
"ping_val" => "19"
],
[
"ping_val" => "20"
]
];
$sum = array_sum(array_column($arr, 'ping_val'));
echo $sum; // 39
答案 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”。