Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

Как правильно писать код, чтобы не было PHP Notice: Undefined index?

имеется такой код:

if (count($com_offer['items'])) {
    foreach ($com_offer['items'] as $_item) {
        $com_offer['offer_count'] += $_item['quantity'];
        $com_offer['offer_total'] += $_item['sale'] * $_item['quantity'];
    }
}


в логах:

[16-Feb-2023 06:15:06 UTC] PHP Notice: Undefined index: quantity


я понимаю, что ему не нравится что я обращаюсь к элементу массива $_item с индексом quantity - который может не существовать, ну что же мне теперь везде делать проверку на существование такого элемента с индексом?

типа так:

$com_offer['offer_count'] += isset($_item['quantity']) ? $_item['quantity'] : 0;


других вариантов нет?
в моём случае в $_item всегда будет элемент с индексом quantity
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Да. Всегда нужны проверки. Или на этапе формирования массива заполнять все необходимые ключи значениями по умолчанию.

ну или как вариант

$com_offer['offer_count'] += ( $_item['quantity'] ?? 1 );
$com_offer['offer_total'] += $_item['sale'] * ( $_item['quantity'] ?? 1 );


$quantity = $_item['quantity'] ?? 1;
$com_offer['offer_count'] += $quantity;
$com_offer['offer_total'] += $_item['sale'] * $quantity;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Vitsliputsli
везде делать проверку на существование такого элемента с индексом?

Вы получаете значение переменной, если ее не существует, то что должно быть использовано? Если вы заботитесь о качестве вашего кода и его стабильной работе, то вариант "ну подставь что-нибудь" не подходит и нужно четко прописывать что должно быть.
Ответ написан
Комментировать
@rPman
если ты точно знаешь что отсутствие переменной это нормальная ситуация, то можно отключить проверку ее наличия с помощью @, тогда будет подставлено значение NULL в случае ошибки для строк, и 0 для чисел
@$com_offer['offer_count'] += @$_item['quantity'];
В данном случае если у тебя оба ключа будут отсутствовать то будет создан 'offer_count' с 0 значением

игнорирование ошибки считается плохой практикой, но как и везде всегда нужно дойти до маразма и остановиться, помни что ты решаешь задачу а не ищешь красоту решения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы