Ich erhalte diesen PHP-Fehler:
PHP Notice: Undefined offset: 1
Hier ist der PHP-Code, der diesen Fehler auslöst:
$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 dieser Fehler? Was verursacht diesen Fehler?
Ändern Sie
$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 Ihrer Datei hat einen Doppelpunkt und daher gibt explode on it ein Array der Größe 1 zurück.
Laut php.net mögliche Rückgabewerte von explode:
Gibt ein Array von Strings zurück, das durch Aufteilung des String-Parameters an den durch das Trennzeichen gebildeten Grenzen erstellt wurde.
Wenn delimiter eine leere Zeichenkette ist (""), gibt explode() FALSE zurück. Wenn delimiter einen Wert enthält, der nicht in string enthalten ist, und eine negative Grenze verwendet wird, wird ein leeres Array zurückgegeben, andernfalls wird ein Array, das string enthält, zurückgegeben.
Wie kann man den 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 diese Fehlermeldung?
Es bedeutet, dass der php-Compiler nach dem Schlüssel 1
gesucht hat und den Hash damit verglichen hat und keinen Wert gefunden hat, der damit verbunden ist und dann sagte Undefined offset: 1
**Wie kann ich diesen Fehler beseitigen?
Fragen Sie das Array, ob der Schlüssel existiert, bevor Sie seinen Wert zurückgeben, wie folgt:
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Wenn das Array Ihren Schlüssel nicht enthält, fragen Sie nicht nach seinem Wert. Obwohl diese Lösung Ihrem Programm doppelte Arbeit macht, um "zu prüfen, ob er'da ist" und dann "ihn zu holen".
Alternative Lösung, die'schneller ist:
Wenn es sich bei einem fehlenden Schlüssel um einen außergewöhnlichen Umstand handelt, der durch einen Fehler verursacht wurde, ist es schneller, einfach den Wert zu ermitteln (wie in "echo $yarr[1]"), den Offset-Fehler abzufangen und ihn wie folgt zu behandeln: https://stackoverflow.com/a/5373824/445131
Dies ist ein "PHP-Hinweis", Sie könnten ihn also theoretisch ignorieren. Ändern Sie php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
In
error_reporting = E_ALL & ~E_NOTICE
Dies zeigt alle Fehler an, mit Ausnahme von Hinweisen.