Code Fix

初級

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であること自体に意味を持たせている設計では、この違いが実際のバグにつながります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)