2013-07-03 8 views
39

ja dostaję ten błąd PHP:PHP Wskazówka: Undefined offset: 1 z tablicy podczas odczytywania danych

PHP Notice: Undefined offset: 1 

Oto kod PHP, który rzuca go:

$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_: 
} 

Co ten błąd oznacza, ? Co powoduje ten błąd?

+1

Jak pewny jesteś, że każda linia w pliku zawiera dwukropek w nim? – andrewsi

+0

wykonaj 'var_dump ($ parts)'. prawdopodobnie zobaczysz, że otrzymujesz punkt, który jest niezdefiniowanym przesunięciem, w tablicy części nie ma klucza '1'. –

+2

Jeśli wygląda na to, że wszystkie linie mają dwukropek, sprawdź puste linie. – Barmar

Odpowiedz

76

Zmień

$data[$parts[0]] = $parts[1]; 

do

if (! isset($parts[1])) { 
    $parts[1] = null; 
} 

$data[$parts[0]] = $parts[1]; 

lub po prostu:

$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null; 

Nie każda linia pliku zawiera dwukropek w nim i dlatego eksplodować na to zwraca tablicę rozmiar 1.

Według php.net possible return values from explode:

Returns an array of strings created by splitting the string parameter on boundaries formed by the delimiter.

If delimiter is an empty string (""), explode() will return FALSE. If delimiter contains a value that is not contained in string and a negative limit is used, then an empty array will be returned, otherwise an array containing string will be returned.

+0

Dzięki GGio! Świetne wyjaśnienie, bardzo jasne. – alchuang

+0

To działa. Dziękuję Ci –

1

Jest to "PHP Wskazówka", więc można teoretycznie ignorować. Zmień php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 

Aby

error_reporting = E_ALL & ~E_NOTICE 

Ten pokaz wszystkie błędy, z wyjątkiem komunikatów.

17

Jak odtworzyć powyższy błąd w 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 

Co oznacza, że ​​komunikat o błędzie oznacza?

Oznacza to kompilator PHP szukali klucza 1 i prowadził hash przeciwko niemu i nie znaleźliśmy żadnej wartości z nim związane, a następnie powiedział Undefined offset: 1

Jak zrobić taki błąd odejść?

Zapytaj tablicę jeśli klucz istnieje przed powrotem jego wartość tak:

php> echo array_key_exists(1, $yarr); 

php> echo array_key_exists(4, $yarr); 
1 

Jeśli tablica nie zawiera klucz, nie prosić o jej wartości. Chociaż to rozwiązanie powoduje podwójną pracę dla twojego programu, aby "sprawdzić, czy to tam jest", a następnie "go dostać".

Alternatywne rozwiązanie to szybciej:

Jeżeli uzyskanie brakujący klucz to wyjątkowe okoliczności spowodowane błędem, to szybciej po prostu uzyskać wartość (jak w echo $yarr[1];) i haczyk, że przesunięcie błąd i poradzić tak: https://stackoverflow.com/a/5373824/445131

-5

możesz również spróbować usunąć ostrzeżenie ...

error_reporting=0 
0

Właśnie niedawno miał ten problem i nawet nie wierzą, że to moja błędnie:

Array("Semester has been set as active!", true) 
Array("Failed to set semester as active!". false) 

I faktycznie tak było! Właśnie przypadkowo wpisane „.” zamiast „,” ...

Powiązane problemy