2010-03-24 16 views
29

Otrzymuję następujący błąd w PHPundefined przesunięcie błąd PHP

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

Oto kod PHP, który wywołuje go:

<?php 

# ... 

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

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

Co oznacza błąd oznacza?

+0

Gdy używam: $ url = ' http://www.imdb.com/title/tt0367882/ "; Pokazuje informacje o filmie dla tego tytułu. Kiedy używam $ url = $ _GET ['link']; Nie wyświetla danych – user272899

Odpowiedz

32

Jeśli preg_match nie znalazł dopasowania, $matches jest pustą tablicą. Należy więc sprawdzić, czy preg_match znalazł mecz przed uzyskaniem dostępu $matches[0], na przykład:

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

Naprawiono błąd. Ale nadal nie mogę się domyślić, dlaczego nie wyświetli informacji o filmie, gdy użyję: $ url = $ _GET ['link']; i wyświetla się tylko wtedy, gdy używam: $ url = 'http://www.imdb.com/title/tt0367882/'; Testowałem, że otrzymuję poprawne dane ze zmiennej z echo i jestem, ale to nie działa. – user272899

+1

Blok "else" nie jest konieczny, ponieważ funkcja i tak zwróci 'NULL' automatycznie. –

28

Jak odtworzyć ten błąd w PHP:

utworzyć pustą tablicę i poprosić o wartości podanej kluczowym jak to:

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 

Co się stało?

Poprosiłeś o tablicę, aby podać wartość podaną jako klucz, którego nie zawiera. Da ci to wartość NULL, a następnie umieść powyższy błąd w dzienniku błędów.

Szukał klucza w tablicy i znalazł undefined.

Jak sprawić, by błąd się nie wydarzył?

Zapytaj, czy klucz istnieje najpierw, zanim zapytasz o jego wartość.

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

Jeśli klucz nie istnieje, a następnie uzyskać wartość, jeśli nie istnieje, nie ma potrzeby zapytań dla jego wartości.

3

Niezdefiniowany błąd przesunięcia w PHP jest podobny do "ArrayIndexOutOfBoundException" w Javie.

przykład:

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

błąd: Undefined przesunięcie 2

Oznacza to masz na myśli klucz tablicy, która nie istnieje. "Przesunięcie" odnosi się do liczby całkowitej tablicy numerycznej, a "indeks" odnosi się do klucza ciągowego tablicy asocjacyjnej o numerze .

0

Undefined przesunięcie oznacza, że ​​jest pusta klucz tablica na przykład:

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

Można rozwiązać ten problem za pomocą pętli (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] = ""; 
} 
Powiązane problemy