web-dev-qa-db-fra.com

décalage non défini PHP erreur

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?

41
user272899

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;
    }
}
38
Gumbo

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.

30
Eric Leschinski

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.

3
pathe.kiran

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] = "";
}
1
Felix Siaw-Yeboah