2013-07-03 10 views
39

Lese ich diese PHP Störung erhalten:PHP Hinweis: Undefined offset: 1 mit Array, wenn Daten

PHP Notice: Undefined offset: 1 

Hier ist der PHP-Code, es wirft:

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

Was bedeutet diese Fehler bedeuten ? Was verursacht diesen Fehler?

+1

Wie sicher sind Sie, dass jede Zeile in Ihrer Datei einen Doppelpunkt enthält? – andrewsi

+0

machen Sie einen 'var_dump ($ parts)'. Sie werden wahrscheinlich feststellen, dass der Punkt, an dem Sie diesen undefinierten Versatz erhalten, keine "1" -Taste im Teile-Array enthält. –

+2

Wenn alle Zeilen einen Doppelpunkt haben, prüfen Sie, ob Leerzeilen vorhanden sind. – Barmar

Antwort

76

ändern

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

zu

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

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

oder einfach:

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

Nicht jede Zeile der Datei hat einen Doppelpunkt darin und deshalb explodieren auf sie ein Array zurückgibt von Größe 1.

Nach 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

Danke GGio! Große Erklärung, sehr klar. – alchuang

+0

Es funktioniert. Vielen Dank –

1

Dies ist eine "PHP Notice", so könnte man es in der Theorie ignorieren. Ändern php.ini:

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

Um

error_reporting = E_ALL & ~E_NOTICE 

Diese zeigen alle Fehler, mit Ausnahme dar.

17

Wie die obigen Fehler in PHP reproduzieren:

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 

Was bedeutet, dass Fehlermeldung?

Es bedeutet, dass der PHP-Compiler für den Schlüssel 1 sah und lief den Hash dagegen und keinen Wert mit ihr verbundenen fanden sagte dann Undefined offset: 1

Wie kann ich diesen Fehler machen weggehen?

Stellen Sie das Array, wenn der Schlüssel wie dieser seinen Wert vor der Rückkehr besteht:

php> echo array_key_exists(1, $yarr); 

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

Wenn das Array Ihre Schlüssel nicht enthält, nicht für ihr Wert nicht fragen. Obwohl diese Lösung Doppelarbeit für Ihr Programm macht, um "zu prüfen, ob es da ist" und dann "loszuwerden".

Alternative Lösung, die schneller ist:

Wenn ein fehlenden Schlüssel immer ein außergewöhnlicher Umstand durch einen Fehler verursachte, ist es schneller ist den Wert nur zu erhalten (wie in echo $yarr[1];) und fängt die Offset-Fehler und damit umgehen wie folgt: https://stackoverflow.com/a/5373824/445131

-5

Sie können auch versuchen, Warnung zu entfernen ...

error_reporting=0 
0

Ich hatte gerade vor kurzem dieses Problem und ich nicht einmal glaube, dass es meine war Tippfehlern:

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

Und tatsächlich war es! Ich habe gerade versehentlich "." anstatt "," eingegeben ...

Verwandte Themen