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?

35
demandé sur Cœur 2010-03-24 17:02:17

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;
    }
}
34
répondu Gumbo 2010-03-24 14:05:37

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.

28
répondu Eric Leschinski 2014-02-15 04:28:50

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.

3
répondu pathe.kiran 2015-01-25 13:19:00

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] = "";
}
0
répondu Felix Siaw-Yeboah 2016-06-10 22:26:33