【PHP】Notice: Undefined offset: エラーの原因と対処方法/安全な回避方法

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])には確実にアクセスすることが可能となります。

広告
広告