向数组中可能不存在的总元素添加值

问题描述 投票:0回答:4

我想做这样的事情:

foreach($values as $key => $value){
    //modify the key here, so it could be the same as one before

    //group by key and accumulate values
    $data[$key]['total'] += $value - $someothervalue;
}

这在 php 中可能吗?或者我必须先检查一下吗?

isset($data[$key]['total'])
php arrays multidimensional-array sum grouping
4个回答
1
投票

如果我理解正确的话,你可以不检查密钥是否仅存在于 PHP 7 及以上版本吗

foreach($values as $key => $value)
    $data[$key]['total'] = ($data[$key]['total'] ?? 0) + $value - $someothervalue;;

无论如何,php 允许您创建这样的新密钥,但不要忘记在服务器中禁用错误重现以避免收到通知...


0
投票

Php 允许向数字添加

NULL
值(当用于数字运算时
+,-,*
将其处理为 0),因此如果您不介意覆盖它,则无需检查
isset($data[$key]['total'])
(并且从
+= 
运营商我想你不介意)。


0
投票

可以使用

+=
增加不存在的键。如果它不存在,PHP 将自动创建它,初始值为
null
,当您尝试添加它时,该值将被强制转换为零。每次发生时都会生成两个通知:

注意:未定义的偏移量:x

其中

x
$key

的值

注意:未定义索引:总计

如果您不关心这些通知,请继续。它会起作用的。如果您确实关心这些通知,则必须在对其执行任何操作之前检查该密钥是否存在。正如你所说,

isset($data[$key]['total'])
适用于此,但实际上你只需要检查
isset($data[$key])
,因为你只为每个
'total'
写入
$key

foreach($values as $key => $value){
    //modify the key here, so it could be the same as one before

    //group by key and accumulate values
    $inc = $value - $someothervalue;
    if (isset($data[$key])) {
        $data[$key]['total'] += $inc;
    } else {
        $data[$key]['total'] = $inc;
    }
}

我建议这样做,因为我确实关心通知。有各种其他问题讨论这个问题。他们年龄较大,按照当前标准,可能会被视为基于意见,但其中的一些意见可能会提供一些见解来帮助您做出决定。


0
投票

感谢您的所有回答。我去了:

foreach($values as $key => $value){
    //modify the key here, so it could be the same as one before

    //group by key and accumulate values
    $inc = $value - $someothervalue;

    if (!isset($data[$key]['total']){
        $data[$key]['total'] = 0;
    }

    $data[$key]['total'] = += $inc;
}
© www.soinside.com 2019 - 2024. All rights reserved.