Я получаю эту ошибку 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;
Не в каждой строке вашего файла есть двоеточие, поэтому explode на них возвращает массив размера 1.
Согласно php.net возможные возвращаемые значения от explode:
Возвращает массив строк, созданный путем разбиения строкового параметра на границы, образованные разделителем.
Если разделитель - пустая строка (""), 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
, выполнил хэш по нему и не нашел никакого значения, связанного с ним, после чего сказал Неопределенное смещение: 1
.
Как сделать так, чтобы ошибка исчезла?
Спросите массив, существует ли ключ, прежде чем возвращать его значение, например, так:
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Если массив не содержит вашего ключа, не запрашивайте его значение. Хотя это решение делает двойную работу для вашей программы: "проверить, есть ли он", а затем "пойти и получить его".
Альтернативное решение, которое быстрее:.
Если получение отсутствующего ключа является исключительным обстоятельством, вызванным ошибкой, то'быстрее просто получить значение (как в echo $yarr[1];
), перехватить ошибку смещения и обработать ее следующим образом: https://stackoverflow.com/a/5373824/445131.
Это "PHP Notice", поэтому теоретически вы можете его игнорировать. Измените php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
На
error_reporting = E_ALL & ~E_NOTICE
Здесь отображаются все ошибки, кроме уведомлений.
Идеальным решением будет как ниже. Вы выиграли'т Мисс значения от 0 до n.
$len=count($data);
for($i=0;$i<$len;$i++)
echo $data[$i]. "<br>";
Я только недавно был этот вопрос и я не'т даже думаю, это был мой опечатки:
Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)
И на самом деле было! Я просто случайно нажали " по.&и" а не " по," по...
мой быстрый решение было минус 1 до длины массива, как
$len = count($data);
for($i=1; $i<=$len-1;$i++){
echo $data[$i];
}
мое смещение всегда было последнее значение, если счетчик был 140, то он будет говорить офсетная 140
, но после использования минус 1 все было нормально