こんにちは!ぐちです。
isset()
PHPで連想配列にキーがあるかどうかを調べる処理ってよく使うと思うのですがコードの書き方によってはWarningが出ることがあるので注意が必要です。よく見かけるコートが以下のようにisset()
を使ったものです。
$list = array('a' => 1, 'b' => 2, 'c' => 3); if(isset($list['a'])) { echo $list['a']; }
このコードだと問題なく動作しますが、以下のコードではどうでしょうか?
$list = array('a' => 1, 'b' => 2, 'c' => 3); if(isset($list['d'])) { echo $list['d']; }
isset()
の判定にかける連想配列のキーを存在しないものにしてみました。このコードはWarningが表示される場合があります。isset()
は本来オブジェクトがあるかどうかを判定する関数です。上記のコードはisset()
の判定が行われる前に連想配列に存在しないキーを指定しているWarningが表示されてしまいます。結果的には存在しないオブジェクトなのでecho
の処理は実行されませんが。
array_key_exists()
そこでキーを指定したオブジェクトが存在するのかを判定せずに、キーが存在するかを判定する関数がarray_key_exists()
です。読んで字のごとく配列内にキーが存在するかを判定してくれる関数です。
使い方としては以下の通りです。
$list = array('a' => 1, 'b' => 2, 'c' => 3); if(array_key_exists('a', $list)) { echo $list['a']; } if(array_key_exists('d', $list)) { echo $list['d']; }
第一引数に存在チェックをするキー名を指定し、第二引数に連想配列を指定します。これで'd'
というキーが存在しなくてもWarningが表示されることなく動作させることができます。
使い分け
ただ処理速度は若干isset()
のほうが早い(?)ようなので、パフォーマンスにこだわる場合でキーが存在しているのが確実な場合はisset()
を、キーの存在自体が怪しいときはarray_key_exsits()
を使い分けるようにするといいかもしれませんね。
では今回はこの辺で。