Warning: Undefined array key の原因と直し方
配列に存在しない添字でアクセスするとWarningが出ますが、プログラムは停止せず、その値はnullとして扱われます。
なぜエラーが出ないのか
Warning: Undefined array key 5 in main.php on line 3
main.php- ファイル名
3- 行番号
Warning- 種別 — 実行は止まりません。メッセージが出力に混ざるだけです
Undefined array key 5- 内容 — 何が起きたか
このエラーが出る典型パターン
パターン1
1 <?php 2 $fruits = ["apple", "banana", "cherry"]; 3 echo $fruits[5 ]; ^
Warning: Undefined array key 5 in main.php on line 3出力に混ざるだけで実行は止まりません(期待: banana)
3個の配列に添字5の要素はありません。PHPは例外にせずWarningを出すだけで、値はnullとして扱われます。
直し方: 5 を 1 にします。
広告
広告スロット(未設定)
パターン2
1 <?php 2 $user = ["name" => "Al", "age" => 20]; 3 echo $user["email"]; ^
Warning: Undefined array key "email" in main.php on line 3出力に混ざるだけで実行は止まりません(期待: Al)
連想配列にemailというキーはありません。存在しない文字列キーでもWarning止まりで実行は続きます。
直し方: "email" を "name" にします。
パターン3
1 <?php 2 $scores = [10, 20, 30]; 3 echo $scores[10]; ^
Warning: Undefined array key 10 in main.php on line 3出力に混ざるだけで実行は止まりません(期待: 30)
3個の配列に添字10の要素はありません。最後の要素の添字は2です。
直し方: 10 を 2 にします。
パターン4
1 <?php 2 $fruits = ["kiwi", "melon", "peach"]; 3 echo $fruits[7 ]; ^
Warning: Undefined array key 7 in main.php on line 3出力に混ざるだけで実行は止まりません(期待: peach)
3個の配列に添字7の要素はありません。PHPは例外にせずWarningを出すだけです。
直し方: 7 を 2 にします。
パターン5
1 <?php 2 $user = ["name" => "Bo", "age" => 30]; 3 echo $user["phone"]; ^
Warning: Undefined array key "phone" in main.php on line 3出力に混ざるだけで実行は止まりません(期待: 30)
連想配列にphoneというキーはありません。存在しない文字列キーでもWarning止まりです。
直し方: "phone" を "age" にします。
よくある誤解
「存在しない添字にアクセスすればエラーで止まるはず」という他言語の感覚は通用しません。PHPはWarningを出すだけで処理を続けるため、nullが後続の計算に静かに紛れ込みます。
実務での勘所
存在確認によく使うisset()には見落としやすい癖があります。isset($arr['key'])は、キーが存在していてもその値がnullそのものであればfalseを返します。「キーがそもそも存在しない」場合と「キーは存在するが値がnull」の場合を区別したいなら、array_key_exists('key', $arr)を使う必要があります。単に警告を避けたいだけならisset()や??で十分ですが、値がnullであること自体に意味を持たせている設計では、この違いが実際のバグにつながります。