Это хорошая практика для инициализации элементов в ассоциативном массиве в php?
-
08-07-2019 - |
Вопрос
Я обнаружил, что много делаю с ассоциативными массивами в PHP.
Я делал это:
foreach ($item as $key=>$value) {
if ($arr[$key] == null) {
$arr[$key] = 0;
}
$arr[$key] += $other_arr[$value];
}
Но потом я понял, что он работает нормально, если исключить строку, которая инициализирует $ arr [$ key], предположительно, поскольку он имеет значение null, которое обрабатывается так же, как и 0.
Безопасно ли делать подобные предположения в php? И если это безопасно, это хорошая идея?
Решение
Это безопасно, но я бы рекомендовал против этого. Если вы поместите ваши сообщения об ошибках в E_NOTICES, вы увидите, что ваш код генерирует их много, маскируя любые реальные ошибки (например, имя переменной с ошибкой).
То, что вы действительно должны делать, это:
if (!isset($arr[$key]))
$arr[$key] = 0;
Это не вызовет уведомлений (но будьте очень осторожны, чтобы не набирать $ arr внутри isset ()).
Другие советы
Начиная с php 7
теперь вы можете делать следующее:
foreach ($item as $key=>$value) {
$arr[$key] = ($arr[$key] ?? 0) + other_arr[$value];
}