web-dev-qa-db-ja.com

未定義のオフセットPHPエラー

PHPで次のエラーが表示されます

未定義のオフセット1に注意してください:C:\ wamp\www\includes\imdbgrabber.phpの36行目

以下に、それを引き起こすPHPコードを示します。

<?php

# ...

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

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

エラーはどういう意味ですか?

41
user272899

preg_match で一致が見つからなかった場合、$matchesは空の配列です。したがって、preg_matchにアクセスする前に、$matches[0]が一致を検出したかどうかを確認する必要があります。次に例を示します。

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

PHPでこのエラーを再現する方法:

空の配列を作成し、次のようなキーを指定して値を要求します。

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

何が起こったのですか?

含まれていないキーを指定した値を配列に要求しました。それはあなたに値NULLを与え、そして上記のエラーをエラーログに入れます。

配列でキーを探し、undefinedを見つけました。

エラーが発生しないようにする方法

値を尋ねる前に、キーが最初に存在するかどうかを尋ねます。

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

キーが存在する場合は値を取得し、存在しない場合はその値を照会する必要はありません。

30
Eric Leschinski

PHPの未定義のオフセットエラーは、Javaの'ArrayIndexOutOfBoundException'に似ています。

例:

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

エラー:未定義のオフセット2

存在しない配列キーを参照していることを意味します。 「オフセット」は数値配列の整数キーを指し、「インデックス」は連想配列の文字列キーを指します。

3
pathe.kiran

未定義のオフセットは、たとえば空の配列キーがあることを意味します。

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

ループを使用して問題を解決できます(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