Неопределенное смещение 1

Неопределенное смещение: 1

Привет... Я столкнулся с проблемой, что неопределенное смещение: 1 в строке 3. Я не могу понять, что это за тип ошибки. Может ли кто-нибудь сказать мне, почему такая ошибка возникает в php

Неопределенное смещение в строке: 3

    foreach ($lines as $line)
    {
      list($var,$value) = explode('=', $line); //line 3
      $data[$var] = $value;
    }

Ответ 1

Вы получаете notice PHP, потому что пытаетесь получить доступ к индексу массива, который не задан.

list($var,$value) = explode('=', $line);

Вышеупомянутая строка взрывает строку $line with = и присваивает 0th значение в $var и 1st значении в $value. Проблема возникает, когда $line содержит некоторую строку без =.

Ответ 2

Я знаю, что это старый вопрос, и достаточный ответ: "Вы получаете уведомление PHP, потому что пытаетесь получить доступ к индексу массива, который не задан". но я считаю, что лучший способ преодолеть проблему с неопределенными индексами, когда есть случаи, когда у вас может быть пустой массив, используя combo()/explode(), следует установить значения по умолчанию с помощью массива pad.

Причина в том, что когда вы используете list(), вы знаете количество переменных, которое вы хотите от массива.

Например:

$delim = '=';
$aArray = array()
$intNumberOfListItems = 2;


list($value1, $value2) = array_pad(explode($delim, $aArray, $intNumberOfListItems ), $intNumberOfListItems , null);

По сути, вы передаете третий параметр, чтобы взорваться, указав, сколько значений вам нужно для ваших переменных list() (в приведенном выше примере два). Затем вы используете array_pad для указания значения по умолчанию (в приведенном выше примере null), когда массив не содержит значения для переменной списка.

Ответ 3

путем выполнения списка ($ var, $ value) php ожидает массив из 2 элементов, если функция разрыва не найдет символ равенства, он вернет только массив с 1 элементом, вызывающим неопределенную ошибку смещения, смещение 1 - второе элемент массива, поэтому, скорее всего, одна из ваших переменных $ line не имеет знака равенства

Ответ 4

Это связано с массивом. Индекс массива не отображается из-за этой неопределенной ошибки смещения...

Поэтому, пожалуйста, проверьте массив с помощью функции print_r.

Ответ 5

Конструкция языка list используется для создания отдельных переменных из массива. Если в вашем массиве недостаточно элементов для количества переменных, которые вы ожидаете в вызове list, вы получите сообщение об ошибке. В вашем случае у вас есть 2 переменные, поэтому вам нужен массив с 2 элементами - индексы 0 и 1.

http://php.net/manual/en/function.list.php

Ответ 7

Это вызвано тем, что ваша $line не содержит " = " в любом месте строки, поэтому она содержит только один элемент в array.list(), который используется для назначения списка переменных в одной операции. Ваш список содержит 2 элемента, но как из данных, возвращаемых методом implode, есть только одна информация. Поэтому он выдает уведомление. Способ преодоления этого - использовать метод array_pad().

list($var,$value) = array_pad(explode('=', $line),2,null);