Тривиальный вопрос.
Предположим, у меня есть следующий код
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$words = ['Apple', 'Avocado', 'Banana', 'Blueberry'];
$dict = [];
// build a dictionary keyed on the first letter
foreach ($words as $word) {
$letter = $word[0];
// is this condition necessary?
if (!isset($dict[$letter])) {
$dict[$letter] = [];
}
$dict[$letter][] = $word;
}
?>
Обычно, когда я создаю словарь, перед добавлением записи я гарантирую, что массив существует, как показано в моем примере.
Я всегда думал, что в противном случае появится предупреждение, но, похоже, это не так.
Так необходимо ли условие IF?
От официальная документация по массивам (выделение мое):
$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
Если
$arr
еще не существует, он будет создан, так что это также
Альтернативный способ создания массива. Эта практика однако
обескуражен, потому что если$arr
уже содержит некоторое значение (например, строку
из переменной запроса), то это значение останется на месте и[]
может фактически означать оператор доступа к строке. Всегда лучше
инициализировать переменную прямым присваиванием.
Предупреждение не будет выдано, но для ясности предпочтительно инициализировать прямым назначением, как вы всегда это делали.
Других решений пока нет …