PHPでWarningを出さずに連想配列のキーの存在チェックを行う方法

こんにちは!ぐちです。

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()を使い分けるようにするといいかもしれませんね。

では今回はこの辺で。