我想做这样的事情:
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 7 及以上版本吗
foreach($values as $key => $value)
$data[$key]['total'] = ($data[$key]['total'] ?? 0) + $value - $someothervalue;;
无论如何,php 允许您创建这样的新密钥,但不要忘记在服务器中禁用错误重现以避免收到通知...
Php 允许向数字添加
NULL
值(当用于数字运算时 +,-,*
将其处理为 0),因此如果您不介意覆盖它,则无需检查 isset($data[$key]['total'])
(并且从 +=
运营商我想你不介意)。
您可以使用
+=
增加不存在的键。如果它不存在,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;
}
}
我建议这样做,因为我确实关心通知。有各种其他问题讨论这个问题。他们年龄较大,按照当前标准,可能会被视为基于意见,但其中的一些意见可能会提供一些见解来帮助您做出决定。
感谢您的所有回答。我去了:
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;
}