erreur PHP offset indéfini
Je reçois L'erreur suivante en PHP
Notez le décalage indéfini 1: in C:wampwwwincludesimdbgrabber.php ligne 36
Voici le code PHP qui le provoque:
<?php
# ...
function get_match($regex, $content)
{
preg_match($regex,$content,$matches);
return $matches[1]; // ERROR HAPPENS HERE
}
Que signifie l'erreur?
4 réponses
Si preg_match
n'a pas trouver une correspondance, $matches
est un tableau vide. Vous devriez donc vérifier si preg_match
a trouvé une correspondance avant d'accéder à $matches[0]
, par exemple:
function get_match($regex,$content)
{
if (preg_match($regex,$content,$matches)) {
return $matches[0];
} else {
return null;
}
}
Comment reproduire cette erreur en PHP:
Créez un tableau vide et demandez la valeur donnée par une clé comme ceci:
php> $foobar = array();
php> echo gettype($foobar);
array
php> echo $foobar[0];
PHP Notice: Undefined offset: 0 in
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) :
eval()'d code on line 1
Que s'est-il passé?
Vous avez demandé à un tableau de vous donner la valeur donnée une clé qu'il ne contient pas. Il vous donnera la valeur NULL puis mettra l'erreur ci-dessus dans le errorlog.
Il a cherché votre clé dans le tableau, et a trouvé undefined
.
Comment faire en sorte que l'erreur ne se produise pas?
Demandez si la clé existe avant de vous aller demander sa valeur.
php> echo array_key_exists(0, $foobar) == false;
1
Si la clé existe, alors obtenez la valeur, si elle n'existe pas, pas besoin d'interroger sa valeur.
Erreur de décalage indéfini en PHP est comme 'ArrayIndexOutOfBoundException' en Java.
Exemple:
<?php
$arr=array('Hello','world');//(0=>Hello,1=>world)
echo $arr[2];
?>
Erreur: décalage indéfini 2
Cela signifie que vous faites référence à une clé de tableau qui n'existe pas. "Offset" fait référence à la clé entière d'un tableau numérique, et "index" fait référence à la la chaîne de la clé d'un tableau associatif.
Offset indéfini signifie qu'il y a une clé de tableau vide par exemple:
$a = array('Felix','Jon','Java');
// This will result in an "Undefined offset" because the size of the array
// is three (3), thus, 0,1,2 without 3
echo $a[3];
Vous pouvez résoudre le problème en utilisant une boucle (while):
$i = 0;
while ($row = mysqli_fetch_assoc($result)) {
// Increase count by 1, thus, $i=1
$i++;
$groupname[$i] = base64_decode(base64_decode($row['groupname']));
// Set the first position of the array to null or empty
$groupname[0] = "";
}