Sto ricevendo questo errore PHP:
PHP Notice: Undefined offset: 1
Ecco il codice PHP che lo lancia:
$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_:
}
Cosa significa questo errore? Cosa causa questo errore?
Cambia
$data[$parts[0]] = $parts[1];
a
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
o semplicemente:
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
Non tutte le linee del vostro file hanno i due punti e quindi explode su di esse restituisce un array di dimensione 1.
Secondo php.net possibili valori di ritorno da explode:
Restituisce un array di stringhe creato dividendo il parametro stringa sui confini formati dal delimitatore.
Se il delimitatore è una stringa vuota (""), explode() restituisce FALSE. Se il delimitatore contiene un valore che non è contenuto nella stringa e viene usato un limite negativo, allora verrà restituito un array vuoto, altrimenti verrà restituito un array contenente la stringa.
Come riprodurre l'errore di cui sopra 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
**Cosa significa questo messaggio di errore?
Significa che il compilatore php ha cercato la chiave 1
e ha eseguito l'hash contro di essa e non ha trovato alcun valore associato ad essa, quindi ha detto Undefined offset: 1
.
**Come faccio a far sparire l'errore?
Chiedi all'array se la chiave esiste prima di restituire il suo valore in questo modo:
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Se l'array non contiene la vostra chiave, non chiedete il suo valore. Anche se questa soluzione fa fare al vostro programma un doppio lavoro per "controllare se è lì" e poi "andare a prenderlo".
Soluzione alternativa che è più veloce:
Se ottenere una chiave mancante è una circostanza eccezionale causata da un errore, è più veloce ottenere solo il valore (come in echo $yarr[1];
), e catturare l'errore di offset e gestirlo in questo modo: https://stackoverflow.com/a/5373824/445131
Questo è un "Avviso PHP", quindi in teoria potreste ignorarlo. Cambia il file php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
A
error_reporting = E_ALL & ~E_NOTICE
Questo mostra tutti gli errori, tranne gli avvisi.