2010-03-24 33 views
29

Estoy recibiendo el siguiente error en PHPUndefined offset PHP error

Notice undefined offset 1: in C:\wamp\www\includes\imdbgrabber.php line 36

Aquí está el código PHP que lo causa:

<?php 

# ... 

function get_match($regex, $content) 
{ 
    preg_match($regex,$content,$matches);  

    return $matches[1]; // ERROR HAPPENS HERE 
} 

¿Qué significa el error?

+0

Cuando uso: $ url = ' http://www.imdb.com/title/tt0367882/ '; Muestra la información de la película para ese título. Cuando uso $ url = $ _GET ['link']; No muestra los datos – user272899

Respuesta

32

Si preg_match no encontró una coincidencia, $matches es una matriz vacía. Por lo que debe comprobar si preg_match encuentra una coincidencia antes de acceder $matches[0], por ejemplo:

function get_match($regex,$content) 
{ 
    if (preg_match($regex,$content,$matches)) { 
     return $matches[0]; 
    } else { 
     return null; 
    } 
} 
+0

Eso corrigió ese error. Pero todavía no puedo entender por qué no mostrará la información de la película cuando utilizo: $ url = $ _GET ['link']; y solo se muestra cuando uso: $ url = 'http://www.imdb.com/title/tt0367882/'; He probado que obtengo los datos correctos de la variable con echo y lo estoy, pero no funciona. – user272899

+1

El bloque 'else' no es necesario porque la función devolverá' NULL' automáticamente de todos modos. –

28

cómo reproducir este error en PHP:

Crear una matriz vacía y pregunte por el valor dado una llave como esto:

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é pasó?

Ha solicitado una matriz para darle el valor dado una clave que no contiene. Le dará el valor NULL y luego colocará el error anterior en el registro de errores.

Buscó su clave en la matriz y encontró undefined.

¿Cómo hacer que el error no ocurra?

Pregunte si la clave existe primero antes de ir a preguntar por su valor.

php> echo array_key_exists(0, $foobar) == false; 
1 

Si la clave existe, entonces obtenga el valor, si no existe, no necesita consultar su valor.

3

Error de desviación no definido en PHP es como 'ArrayIndexOutOfBoundException' en Java.

ejemplo:

<?php 
$arr=array('Hello','world');//(0=>Hello,1=>world) 
echo $arr[2]; 
?> 

error: Undefined offset 2

Significa que usted se refiere a una clave de matriz que no existe. "Desplazamiento" se refiere a la clave entera de una matriz numérica, y "índice" hace referencia a la clave de cadena de una matriz asociativa.

0

Indefinido compensada significa que hay una clave matriz vacía por ejemplo:

$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]; 

puede resolver el problema utilizando un bucle (tiempo):

$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] = ""; 
}