サンプル集  >  PHP  >  PHP Notice: Undefined offset
PHP Notice: Undefined offset
2013/11/22

PHPを実行したところ次のメッセージが出ました。

PHP Notice: Undefined offset: 1 in C:\php056.php on line 5

◆環境
OS Windows 7 Professional Service Pack 1 (64bit)
PHP 5.5.0 (64bit)

以前、noticeメッセージはphp.iniを変更すれば消せる事を調べました。 しかし、できることなら何もメッセージが出ない方が良いと思います。

Undefined offset は isset を使えば回避できます。

php056.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
<?php
$ar[0]="ZERO";

// 存在しない添え字を指定
// Undefined offsetメッセージが表示される。
echo $ar[1];

// issetで添え字か使えるか検査
if ( isset( $ar[1] ) )
    echo $ar[1];
else
    echo "\$ar[1] is nothing.";
?>

◆実行結果
> php php056.php
PHP Notice:  Undefined offset: 1 in C:\php056.php on line 6

Notice: Undefined offset: 1 in C:\php056.php on line 6
$ar[1] is nothing.

最初の echo では noticeメッセージが3行(1行は空行)が表示されました。 isset で $ar[1] を判定すると false になったので自前のメッセージ「$ar[1] is nothing.」が表示されました。

同じく Undefined index も isset で回避できます。

php0562.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
<?php
$ar['zero']="ZERO";

// 存在しない添え字を指定
// Undefined offsetメッセージが表示される。
echo $ar['one'];

// issetで添え字か使えるか検査
if ( isset( $ar['one'] ) )
    echo $ar['one'];
else
    echo "\$ar['one'] is nothing.";
?>

◆実行結果
> php php0562.php
PHP Notice:  Undefined index: one in C:\php0562.php on line 6

Notice: Undefined index: one in C:\php0562.php on line 6
$ar['one'] is nothing.

isset を使うと、if文の判定部分の isset($ar[1]) と実際に変数を使う場所の echo $ar[1] のように2箇所に同じ $ar[1] を書くようになります。 if文が増えるのを嫌う場合は php.ini で noticeメッセージを出さないようにした方が良いかもしれません。

▲ PageTop  ■ Home


Copyright (C) 2013 ymlib.com