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
}
エラーはどういう意味ですか?
preg_match
で一致が見つからなかった場合、$matches
は空の配列です。したがって、preg_match
にアクセスする前に、$matches[0]
が一致を検出したかどうかを確認する必要があります。次に例を示します。
function get_match($regex,$content)
{
if (preg_match($regex,$content,$matches)) {
return $matches[0];
} else {
return null;
}
}
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
キーが存在する場合は値を取得し、存在しない場合はその値を照会する必要はありません。
PHPの未定義のオフセットエラーは、Javaの'ArrayIndexOutOfBoundException'に似ています。
例:
<?php
$arr=array('Hello','world');//(0=>Hello,1=>world)
echo $arr[2];
?>
エラー:未定義のオフセット2
存在しない配列キーを参照していることを意味します。 「オフセット」は数値配列の整数キーを指し、「インデックス」は連想配列の文字列キーを指します。
未定義のオフセットは、たとえば空の配列キーがあることを意味します。
$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] = "";
}