Ich erhalte den Fehler PHP:
PHP Notice: Undefined offset: 1
Hier ist der PHP Code, der es 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? Wodurch wird dieser Fehler verursacht?
Veränderung
$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 enthält einen Doppelpunkt und daher explodiert darauf ein Array der Größe 1.
Laut php.net mögliche Rückgabewerte von explode :
Gibt ein Array von Strings zurück, das durch Aufteilen des String-Parameters an den vom Trennzeichen gebildeten Grenzen erstellt wurde.
Wenn Trennzeichen eine leere Zeichenfolge ("") ist, gibt explode () FALSE zurück. Wenn das Trennzeichen einen Wert enthält, der nicht in string enthalten ist und ein negativer Grenzwert verwendet wird, wird ein leeres Array zurückgegeben. , Ansonsten wird ein Array mit string zurückgegeben.
So reproduzieren Sie den obigen Fehler in 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
Was bedeutet diese Fehlermeldung?
Es bedeutet, dass der PHP-Compiler nach dem Schlüssel 1
gesucht hat und den Hash dagegen ausgeführt hat und keinen Wert gefunden hat, der mit ihm verbunden ist. Dann sagte Undefined offset: 1
Wie kann ich den Fehler beheben lassen?
Fragen Sie das Array, ob der Schlüssel vorhanden ist, bevor Sie den Wert wie folgt zurückgeben:
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 dem Wert. Diese Lösung sorgt zwar dafür, dass Ihr Programm "prüft, ob es da ist" und dann "abrufen".
Alternative Lösung ist schneller:
Wenn es sich bei einem fehlenden Schlüssel um einen außergewöhnlichen Umstand handelt, der durch einen Fehler verursacht wird, ist es schneller, den Wert abzurufen (wie in echo $yarr[1];
), um den Offsetfehler abzufangen und wie folgt zu behandeln: https://stackoverflow.com/a/ 5373824/445131
Dies ist eine "PHP Notice", also könnte man sie theoretisch ignorieren. php.ini
ändern:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Zu
error_reporting = E_ALL & ~E_NOTICE
Dies zeigt alle Fehler mit Ausnahme von Benachrichtigungen.
Ich hatte vor kurzem dieses Problem und ich glaubte nicht einmal, dass es mein Fehler war:
Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)
Und eigentlich war es so! Ich habe nur versehentlich ". " anstatt ", " eingegeben ...
Verstecken Sie PHP-Warnungen in der Datei
error_reporting(0);
meine schnellste Lösung bestand darin, die Länge des Arrays als Minus 1 zu reduzieren
$len = count($data);
for($i=1; $i<=$len-1;$i++){
echo $data[$i];
}
mein Offset war immer der letzte Wert, wenn der Zähler 140 war, dann offset 140
, aber nach Verwendung von Minus 1 war alles in Ordnung
Die ideale Lösung wäre wie folgt. Sie werden die Werte von 0 bis n nicht verpassen.
$len=count($data); for($i=0;$i<$len;$i++) echo $data[$i]. "<br>";