Я получаю эту ошибку 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_: }
Что означает эта ошибка? Что вызывает эту ошибку?
+ Изменить
$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 () вернет FALSE. Если разделитель содержит значение, которое не содержится в строке, и используется отрицательный предел, возвращается пустой массив, в противном случае возвращается массив, содержащий строку.
Как воспроизвести вышеуказанную ошибку в 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];
), и поймать эту ошибку смещения и обработать ее следующим образом: https: // stackoverflow. ком / а / 5373824/445131
Это «Уведомление PHP», поэтому вы могли бы теоретически игнорировать его. Измените php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
к
error_reporting = E_ALL & ~E_NOTICE
Это показывает все ошибки, кроме уведомлений.
У меня недавно была эта проблема, и я даже не поверила, что это была моя ошибка:
Array("Semester has been set as active!", true) Array("Failed to set semester as active!". false)
И на самом деле это было! Я просто случайно набрал « . », А не « , » …
вы также можете попытаться удалить предупреждение …
error_reporting=0