增加数组中未设置变量/新键的好方法
Nice way to increment unset variable / new key in array
出于某种原因,我经常发现自己做这样的事情:
foreach($source as $key => $value) {
if (!isset($arr[$key])) {
$arr[$key] = 0; // or any other value
}
$arr[$key] += something($value);
}
当我有一个众所周知的数据源时,有时我会这样做:
foreach($source as $key => $value) {
@$arr[$key] += something($value);
}
避免日志垃圾邮件(我不想从日志中删除警告或通知)
还有其他更紧凑、更智能或更漂亮的方法吗?
你可以使用
$arr[$key] = (array_key_exists($key, $arr) ? $arr[$key] : 0) + 10;
但我不认为上面的代码比
更具可读性
if (!array_key_exists($key, $arr)) {
$arr[$key] = 0;
}
$arr[$key] += 10;
旁注与 array_key_exists
array_key_exists() 纯粹检查键是否存在,即使值为 NULL。
而如果键存在且值为 NULL,isset() 将 return 为 false。
为了性能 isset() 更快
PHP7 有最简单的选项:
$arr[$key] = ($arr[$key] ?? 0) + something($value);
如果您不处于更新的最前沿,那么您会遇到这个更冗长但同样正确的版本:
$arr[$key] = (isset($arr[$key]) ? $arr[$key] : 0) + something($value);
对于像这样简单的事情,您不应该抑制错误。
出于某种原因,我经常发现自己做这样的事情:
foreach($source as $key => $value) {
if (!isset($arr[$key])) {
$arr[$key] = 0; // or any other value
}
$arr[$key] += something($value);
}
当我有一个众所周知的数据源时,有时我会这样做:
foreach($source as $key => $value) {
@$arr[$key] += something($value);
}
避免日志垃圾邮件(我不想从日志中删除警告或通知)
还有其他更紧凑、更智能或更漂亮的方法吗?
你可以使用
$arr[$key] = (array_key_exists($key, $arr) ? $arr[$key] : 0) + 10;
但我不认为上面的代码比
更具可读性if (!array_key_exists($key, $arr)) {
$arr[$key] = 0;
}
$arr[$key] += 10;
旁注与 array_key_exists
array_key_exists() 纯粹检查键是否存在,即使值为 NULL。
而如果键存在且值为 NULL,isset() 将 return 为 false。
为了性能 isset() 更快
PHP7 有最简单的选项:
$arr[$key] = ($arr[$key] ?? 0) + something($value);
如果您不处于更新的最前沿,那么您会遇到这个更冗长但同样正确的版本:
$arr[$key] = (isset($arr[$key]) ? $arr[$key] : 0) + something($value);
对于像这样简单的事情,您不应该抑制错误。