この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_:
}
このエラーはどういう意味ですか?このエラーの原因は何ですか?
変化する
$data[$parts[0]] = $parts[1];
に
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
または単に:
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
ファイルのすべての行にコロンが含まれているわけではないため、爆発するとサイズ1の配列が返されます。
php.netによるexplode からの可能な戻り値によると:
区切り文字によって形成された境界で文字列パラメーターを分割することによって作成された文字列の配列を返します。
Delimiterが空の文字列( "")の場合、explode()はFALSEを返します。区切り文字に文字列に含まれない値が含まれ、負の制限が使用される場合、空の配列が返されます。それ以外の場合、文字列を含む配列が返されます。
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];
のように)値を取得し、そのオフセットエラーをキャッチして次のように処理する方が高速です: https://stackoverflow.com/ a/5373824/445131
これは「PHP通知」なので、理論的には無視できます。 php.ini
を変更します。
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
に
error_reporting = E_ALL & ~E_NOTICE
これは、通知を除くすべてのエラーを表示します。
私は最近この問題を抱えていましたが、それが私のミスタイプだとは信じていませんでした:
Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)
そして実際にそうでした!誤って「、」ではなく「。」と入力しただけです...
ファイル内のPHP警告を非表示
error_reporting(0);
私の最速の解決策は、配列の長さをマイナス1にすることでした
$len = count($data);
for($i=1; $i<=$len-1;$i++){
echo $data[$i];
}
カウントが140の場合、私のオフセットは常に最後の値でしたが、offset 140
と表示されますが、マイナス1を使用した後はすべてうまくいきました
理想的な解決策は次のとおりです。 0からnまでの値を見逃すことはありません。
$len=count($data); for($i=0;$i<$len;$i++) echo $data[$i]. "<br>";