Хороший способ увеличить неустановленную переменную / новый ключ в массиве

По какой-то причине я часто пытался сделать что-то подобное:

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);
}

чтобы избежать спама в журнале (я не хочу удалять предупреждения или уведомления из журналов)

Есть ли какой-нибудь другой, более компактный, умный или просто более красивый способ сделать это?

0

Решение

PHP7 имеет самый простой вариант:

$arr[$key] = ($arr[$key] ?? 0) + something($value);

Если вы не на переднем крае обновлений, вы застряли с более подробной, но в равной степени правильной версией:

$arr[$key] = (isset($arr[$key]) ? $arr[$key] : 0) + something($value);

Вы не должны подавлять ошибки для чего-то простого.

4

Другие решения

Вы могли бы использовать

$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 () быстрее

1

По вопросам рекламы [email protected]