wake-up-neo.com

PHP Hinweis: Undefinierter Offset: 1 mit Array beim Lesen von Daten

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?

56
alchuang

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.

100
GGio

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

19
Eric Leschinski

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.

1
Orijmm

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 ...

0
Erikas

Verstecken Sie PHP-Warnungen in der Datei

error_reporting(0);
0
Vitalicus

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>";
0
Sashi Giri