Неопределенное смещение 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
Ответ 6
Решение:
$lines = array('one' => 'fruit=apple', 'two' => 'color=red', 'three' => 'language');
foreach ($lines as $line)
{
list($var,$value) = (strstr($line, '=') ? explode('=', $line) : array($line, ''));
$data[$var] = $value;
}
print_r($data);
Попробуй это..
Для справки http://in1.php.net/manual/en/function.list.php http://in1.php.net/manual/en/function.explode.php
Ответ 7
Это вызвано тем, что ваша $line
не содержит " =
" в любом месте строки, поэтому она содержит только один элемент в array.list(), который используется для назначения списка переменных в одной операции. Ваш список содержит 2 элемента, но как из данных, возвращаемых методом implode, есть только одна информация. Поэтому он выдает уведомление. Способ преодоления этого - использовать метод array_pad().
list($var,$value) = array_pad(explode('=', $line),2,null);