J'obtiens cette erreur PHP :
PHP Notice: Undefined offset: 1
Voici le code PHP qui la génère :
$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_:
}
Que signifie cette erreur ? Quelle est la cause de cette erreur ?
Changement
$data[$parts[0]] = $parts[1];
en
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
ou simplement :
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
Toutes les lignes de votre fichier ne contiennent pas de deux-points et donc explode sur celles-ci renvoie un tableau de taille 1.
Selon [php.net possible return values from explode][1] :
Renvoie un tableau de chaînes de caractères créé en divisant le paramètre chaîne de caractères sur les limites formées par le délimiteur.
Si le délimiteur est une chaîne vide ("" ;), explode() renvoie FALSE. Si le délimiteur contient une valeur qui n'est pas contenue dans la chaîne de caractères et qu'une limite négative est utilisée, alors un tableau vide sera retourné, sinon un tableau contenant la chaîne de caractères sera retourné.
Comment reproduire l'erreur ci-dessus en 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
Que signifie ce message d'erreur ?
Cela signifie que le compilateur php a cherché la clé 1
et a exécuté le hash contre elle et n'a pas trouvé de valeur associée et a dit Undefined offset : 1
'.
**Comment puis-je faire disparaître cette erreur ?
Demandez au tableau si la clé existe avant de retourner sa valeur comme ceci :
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Si le tableau ne contient pas votre clé, ne demandez pas sa valeur. Bien que cette solution implique un double travail pour votre programme, qui doit "vérifier si elle est là" ; et ensuite "aller la chercher" ;.
Solution alternative plus rapide :
Si l'obtention d'une clé manquante est une circonstance exceptionnelle causée par une erreur, il est plus rapide de simplement obtenir la valeur (comme dans echo $yarr[1];
), et d'attraper cette erreur de décalage et de la gérer comme ceci : https://stackoverflow.com/a/5373824/445131
C'est un "PHP Notice" ;, donc vous pouvez en théorie l'ignorer. Modifiez le fichier php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
A
error_reporting = E_ALL & ~E_NOTICE
Ceci montre toutes les erreurs, sauf les avis.