Je reçois l'erreur suivante en PHP
Remarquez le décalage non défini 1: dans la ligne 36 de C:\wamp\www\includes\imdbgrabber.php
Voici le code PHP qui le provoque:
<?php
# ...
function get_match($regex, $content)
{
preg_match($regex,$content,$matches);
return $matches[1]; // ERROR HAPPENS HERE
}
Qu'est-ce que l'erreur signifie?
Si preg_match
n'a pas trouvé de correspondance, $matches
est un tableau vide. Donc, vous devriez 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 à 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 placez l'erreur ci-dessus dans le journal des erreurs.
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 d’aller demander sa valeur.
php> echo array_key_exists(0, $foobar) == false;
1
Si la clé existe, obtenez la valeur, si elle n'existe pas, il n'est pas nécessaire de demander sa valeur.
Erreur d'offset non définie dans PHP est semblable à 'ArrayIndexOutOfBoundException') en Java.
exemple:
<?php
$arr=array('Hello','world');//(0=>Hello,1=>world)
echo $arr[2];
?>
erreur: décalage non défini 2
Cela signifie que vous faites référence à une clé de tableau qui n'existe pas. "Décalage" fait référence à la clé entière d'un tableau numérique et "index" à la clé de chaîne d'un tableau associatif.
Un offset non défini signifie qu'il existe 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] = "";
}