Замечание PHP: Undefined offset: 1 с массивом при чтении данных
Я получаю эту ошибку PHP:
PHP Notice: Undefined offset: 1
Вот код PHP, который его выдает:
$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle); // read in each line
$parts = array_map('trim', explode(':', $line_of_text, 2));
// separates line_of_text by ':' trim strings for extra space
$data[$parts[0]] = $parts[1];
// map the resulting parts into array
//$results('NAME_BEFORE_:') = VALUE_AFTER_:
}
Что означает эта ошибка? Что вызывает эту ошибку?
Ответы
Ответ 1
Измените
$data[$parts[0]] = $parts[1];
к
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
или просто:
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
Не каждая строка вашего файла имеет в ней двоеточие и, следовательно, взорвалась, он возвращает массив размером 1.
В соответствии с php.net возможно вернуть значения из explode:
Возвращает массив строк, созданный путем разделения параметра строки на границах, образованных разделителем.
Если разделителем является пустая строка (""), explode() вернет FALSE. Если разделитель содержит значение, которое не содержится в строке, и используется отрицательный предел, возвращается пустой массив , иначе возвращается массив, содержащий строку.
Ответ 2
Как воспроизвести приведенную выше ошибку в PHP:
php> $yarr = array(3 => 'c', 4 => 'd');
php> echo $yarr[4];
d
php> echo $yarr[1];
PHP Notice: Undefined offset: 1 in
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) :
eval()'d code on line 1
Что означает это сообщение об ошибке?
Это означает, что компилятор php ищет ключ 1
и запускает хэш против него и не нашел никакого значения, связанного с ним, а затем сказал Undefined offset: 1
Как удалить эту ошибку?
Задайте массив, если ключ существует, прежде чем вернуть его значение следующим образом:
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Если массив не содержит ваш ключ, не запрашивайте его значение. Хотя это решение делает двойную работу для вашей программы "проверять, есть ли она там", а затем "пойдите".
Альтернативное решение, которое быстрее:
Если получение отсутствующего ключа является исключительным обстоятельством, вызванным ошибкой, быстрее получить значение (как в echo $yarr[1];
) и уловить эту ошибку смещения и обработать ее следующим образом: fooobar.com/questions/123747/...
Ответ 3
Это "Уведомление PHP", поэтому вы могли бы теоретически игнорировать его. Измените php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Для
error_reporting = E_ALL & ~E_NOTICE
Показывать все ошибки, кроме уведомлений.
Ответ 4
У меня только недавно была эта проблема, и я даже не думал, что это был мой заблуждение:
Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)
И на самом деле это было! Я просто случайно набрал ".", а не ","...
Ответ 5
Скрыть php предупреждения в файле
error_reporting(0);
Ответ 6
мое самое быстрое решение состояло в том, чтобы минус 1 к длине массива как
$len = count($data);
for($i=1; $i<=$len-1;$i++){
echo $data[$i];
}
мое смещение всегда было последним значением, если число было 140, тогда оно скажет offset 140
но после использования минус 1 все было в порядке
Ответ 7
Идеальное решение было бы как ниже. Вы не пропустите значения от 0 до n.
$len=count($data);
for($i=0;$i<$len;$i++)
echo $data[$i]. "<br>";
Ответ 8
вы также можете попытаться удалить предупреждение...
error_reporting=0