По какой-то причине я часто пытался сделать что-то подобное:
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);
}
чтобы избежать спама в журнале (я не хочу удалять предупреждения или уведомления из журналов)
Есть ли какой-нибудь другой, более компактный, умный или просто более красивый способ сделать это?
PHP7 имеет самый простой вариант:
$arr[$key] = ($arr[$key] ?? 0) + something($value);
Если вы не на переднем крае обновлений, вы застряли с более подробной, но в равной степени правильной версией:
$arr[$key] = (isset($arr[$key]) ? $arr[$key] : 0) + 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;
Sidenote isset vs. array_key_exists
array_key_exists () просто проверяет, существует ли ключ, даже если значение равно NULL.
В то время как isset () вернет false, если ключ существует и значение равно NULL.
Для производительности isset () быстрее