はじめに
PHP で「配列に値やキーが存在するか」を調べる方法として、in_array()・array_key_exists()・isset() の3つがあります。
一見似ている関数ですが、それぞれ挙動が異なり、試験問題でもよく出題されます。
この記事では、実際のコードと出力結果を通して違いを整理します。
目次
in_array()関数
in_array()
は 配列の値に needle が含まれるかどうか を調べます。第3引数の strict
が true
の場合は 型も比較 されます。
$array = [
'key 0' => null,
'key 1' => 1,
'key 2' => '2',
];
var_dump(in_array(2,$array)); // bool(true)
var_dump(in_array(2,$array,true)); // bool(false)
var_dump(in_array('hoge',$array)); // bool(false)
2 == '2'
がゆるい比較で一致 →true
2 === '2'
は型が異なる →false
- 存在しない値は →
false
array_key_exists()関数
array_key_exists()
は 配列に指定したキーが存在するか を調べます。値が null
でもキーがあれば true
です。
$array = [
'key 0' => null,
'key 1' => 1,
'key 2' => '2',
];
var_dump(array_key_exists('key 0', $array)); // bool(true)
var_dump(array_key_exists('key 1', $array)); // bool(true)
var_dump(array_key_exists('no key', $array)); // bool(false)
'key 0'
は値がnull
でもキーが存在するのでtrue
- 存在しないキーは
false
isset()関数
isset()
は 変数がセットされていて、かつ null でないか を調べます。null の場合は false
を返します。
$array = [
'key 0' => null,
'key 1' => 1,
'key 2' => '2',
];
var_dump(isset($array['key 0'])); // bool(false)
var_dump(isset($array['key 1'])); // bool(true)
var_dump(isset($array['no key'])); // bool(false)
'key 0' => null
→ null は false 扱い'key 1' => 1
→ true'no key'
は存在しないので false
まとめ表
チェック対象 | in_array | array_key_exists | isset |
---|---|---|---|
値 '2' として入っているときに 2 を探す | true (strict=false)false (strict=true) | – | – |
'key 0' => null | 無関係 | true (キーあり) | false (null は不可) |
'key 1' => 1 | 値として探せばOK | true | true |
存在しないキー | – | false | false |
まとめ
- 値を探す →
in_array()
- キーの有無を確認 →
array_key_exists()
- 値がセットされ null でないか →
isset()
それぞれの違いを正しく理解しておくことで、試験対策はもちろん、日常のコーディングでもバグを防ぐことができます。