Исправление ошибки "Notice: undefined index" в PHP

Александр Кичатов

Почему возникает ошибка

Ошибка undefined index появляется при попытке обращения к не существующему элементу массива:
<?php
$arr = [];
echo $arr['title'];

Если в настройках PHP включено отображение ошибок уровня E_NOTICE, то при запуске этого кода в браузер выведется ошибка:

Notice: Undefined index: title in D:\Programs\OpenServer\domains\test.local\index.php on line 3

Как исправить ошибку

Если элемента в массиве нет, значит нужно ещё раз проверить логику программы и понять, почему в массиве нет тех данных, что вы ожидаете. Проверить, что по факту лежит в переменной можно с помощью функции var_dump():

$arr = [];
var_dump($arr);

При работе с массивами $_GET и $_POST нет гарантии, что клиент (браузер) отправил абсолютно все нужные нам данные. В этом случае можно добавить проверку на их существование:

<?php
if(!isset($_GET['body'], $_GET['title']))
    die('Пришли не все данные');

// Далее что-то делаем с данными

Если ключ массива существует не всегда, можно указать для него значение по-умолчанию:

<?php
if(isset($_GET['id']))
    $id = $_GET['id'];
else
    $id = 0;

Сокращённый синтаксис:

// С тернарным оператором
$id = isset($_GET['id']) ? $_GET['id'] : 0;

// С оператором объединения с null (PHP 7+)
$id = $_GET['id'] ?? 0;

Или если нужно сохранить значение по-умолчанию в сам массив:

<?php
if(!isset($arr['title']))
    $arr['title'] = '';

// Или короче (PHP 7+)
$arr['title'] = $arr['title'] ?? '';

// Или ещё короче (PHP 7.4+)
$arr['title'] ??= '';

Пишите в комментариях, если столкнулись с этой ошибкой и не можете найти решение.

Комментарии