Подтвердить что ты не робот

Замечание 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_:
}

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

4b9b3361

Ответ 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