Замечание PHP: Неопределенное смещение: 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_: } 

Что означает эта ошибка? Что вызывает эту ошибку?

+ Изменить

 $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