Это хорошая практика для инициализации элементов в ассоциативном массиве в php?

StackOverflow https://stackoverflow.com/questions/308835

  •  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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top