PHP erreur de décalage indéfini
Question
Je reçois l'erreur suivante dans PHP
Indication undefined décalage 1: C: \ wamp \ www \ TTC ligne \ de imdbgrabber.php 36
Voici le code PHP qui provoque:
<?php
# ...
function get_match($regex, $content)
{
preg_match($regex,$content,$matches);
return $matches[1]; // ERROR HAPPENS HERE
}
Qu'est-ce que l'erreur?
La solution
Si preg_match
n'a pas trouver une 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;
}
}
Autres conseils
Comment reproduire cette erreur en PHP:
Créer un tableau vide et demander la valeur donnée 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
Qu'est-il arrivé?
Vous avez demandé un tableau pour vous donner la valeur donnée une clé qu'il ne contient pas. Il vous donnera la valeur NULL puis mettre l'erreur ci-dessus dans le journal des erreurs.
Il avait l'air de votre clé dans le tableau, et trouvé undefined
.
Comment faire l'erreur ne se produise?
Demandez si la clé existe d'abord avant d'aller demander sa valeur.
php> echo array_key_exists(0, $foobar) == false;
1
Si la clé existe, puis obtenir la valeur, si elle n'existe pas, pas besoin d'interroger pour sa valeur.
Undefined offset erreur PHP est comme ArrayIndexOutOfBoundException en Java.
exemple:
<?php
$arr=array('Hello','world');//(0=>Hello,1=>world)
echo $arr[2];
?>
erreur: Non défini décalage 2
Cela signifie que vous faites référence à une clé de tableau qui n'existe pas. "Décalage" se réfère à la clé de nombre entier d'un réseau numérique, et « index » se réfère à la clé de chaîne d'un tableau associatif.
signifie Undefined offset 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 (en):
$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] = "";
}