PHPで連想配列を使う時、配列にキーが存在しているかどうか
チェックを行う場合があると思います。
そんな時によく使われるのが、 array_key_exists や isset です。
ただし2つとも微妙に挙動が違うので、正しい挙動を覚えておきたいところです。
isset
isset の使い方は以下のような感じです。
$array = array( 'test1' => 'テスト1だよ' , 'test2' => 'テスト2だよ' , 'test3' => null , 'test4' => 'テスト4だよ' );
test1 というキーの存在チェックは、
if( isset( $array['test1'] ) ) { echo 'ok'; } else { echo 'ng'; }
このように記述します。
結果は、 ok となります。
では、キーの値が null の場合はどうでしょうか。
if( isset( $array['test3'] ) ) { echo 'ok'; } else { echo 'ng'; }
答えは、 ng です。
ok とならないところが肝心です。
このように isset は、キーが存在しても値が null の場合は、
false と判定してしまいます。
array_key_exists
array_key_exists の使い方は以下のような感じです。
$array = array( 'test1' => 'テスト1だよ' , 'test2' => 'テスト2だよ' , 'test3' => null , 'test4' => 'テスト4だよ' );
test1 というキーの存在チェックは、
if( array_key_exists( 'test1', $array ) ) { echo 'ok'; } else { echo 'ng'; }
このように記述します。
結果は、 ok となります。
では、キーの値が null の場合はどうでしょうか。
if( array_key_exists( 'test3', $array ) ) { echo 'ok'; } else { echo 'ng'; }
答えは、 ok です。
isset の時とは挙動が違いますね。
では、存在しない test5 というキーの場合はどうでしょうか。
if( array_key_exists( 'test5', $array ) ) { echo 'ok'; } else { echo 'ng'; }
答えは、 ng です。
このように、 array_key_exists の場合は、
キーの値が null でもしっかりキーの存在チェックを行います。
確実にキーが存在するかどうかの場合は、
isset ではなく、 array_key_exists を使う方がいいでしょう。
コメント