PHP開発では頻繁に見かけるエラーです。
Notice: Undefined offset: 0 in untitled.php on line 4
原因
空の配列に対して要素の取得を行おうとすると、本エラーが発生します。
$ary = array(); // 空の配列
echo $ary[0]; // Notice: Undefined offset: 0
また配列のサイズを超えた範囲にアクセスしてしまうと、同様のエラーが発生する原因となります。
$ary = array(1, 2);
echo $ary[9]; // Notice: Undefined offset: 9
対処方法
配列のサイズやインデックスをしっかりと確認してみましょう。注意点として、配列のインデックスは0から始まります。配列の一つ目の要素を取得する場合には$ary[1]
ではなく$ary[0]
という形でアクセスする必要があります。
$ary = array("a");
echo $ary[0]; // "a"
echo $ary[1]; // Notice: Undefined offset: 1
回避方法
本エラーのより安全な回避方法としては、isset関数による要素の存在チェックや、配列に対する範囲チェック(境界チェック)、配列の空チェックを行うことが有効です。
配列要素の存在をチェックする方法
isset関数は配列要素の存在をチェックすることも可能です。
$ary = array(1, 2, 3);
if (isset($ary[2])) {
echo $ary[2];
}
配列の要素値がNULLの場合、isset関数はfalseを返すため注意して下さい。
配列の範囲チェックを行う方法
count関数で配列のサイズをチェックします。
$ary = array("a", "b", "c");
if (count($ary) > 2) {
echo $ary[2]; // "c"
}
count
関数は配列の要素数(上記の例では3
)を返しますので、この要素数よりも小さいインデックスであれば、安全な添字アクセスが可能となります。
配列の空チェックを行う方法
empty関数またはif文の条件式で、配列が空の状態かどうかを判定します。
$ary = array(1);
if (!empty($ary)) {
echo $ary[0]; // "1"
}
if ($ary) {
echo $ary[0]; // "1"
}
配列が空でないと分かれば、少なくとも配列の先頭要素($ary[0]
)には確実にアクセスすることが可能となります。