81

次の PHP エラーが発生します。

PHP Notice:  Undefined offset: 1

これをスローするPHPコードは次のとおりです。

$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map

while (!feof($file_handle) ) {
    $line_of_text = fgets($file_handle); // read in each line
    $parts = array_map('trim', explode(':', $line_of_text, 2)); 
    // separates line_of_text by ':' trim strings for extra space
    $data[$parts[0]] = $parts[1]; 
    // map the resulting parts into array 
    //$results('NAME_BEFORE_:') = VALUE_AFTER_:
}

このエラーはどういう意味ですか? このエラーの原因は何ですか?

4

10 に答える 10

21

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

php> $yarr = array(3 => 'c', 4 => 'd');

php> echo $yarr[4];
d

php> echo $yarr[1];
PHP Notice:  Undefined offset: 1 in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) : 
eval()'d code on line 1

そのエラーメッセージはどういう意味ですか?

これは、php コンパイラがキー1を探し、それに対してハッシュを実行し、それに関連付けられた値が見つからなかったことを意味します。Undefined offset: 1

そのエラーをなくすにはどうすればよいですか?

次のように値を返す前に、キーが存在するかどうかを配列に問い合わせます。

php> echo array_key_exists(1, $yarr);

php> echo array_key_exists(4, $yarr);
1

配列にキーが含まれていない場合は、その値を尋ねないでください。この解決策は、プログラムが「そこにあるかどうかを確認」してから「取得する」という二重の作業を行いますが。

より高速な代替ソリューション:

キーの欠落がエラーによる例外的な状況である場合は、(のようにecho $yarr[1];) 値を取得し、そのオフセット エラーをキャッチして、次のように処理する方が高速です

于 2014-02-15T03:50:21.390 に答える
3

2020 年に Php7 で更新:

以下を実行するだけで、 Null 合体演算子を使用してこれを行うより良い方法があります。

$data[$parts[0]] = $parts[1] ?? null;
于 2020-08-23T02:46:25.890 に答える