はじめに
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'がゆるい比較で一致 →true2 === '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()
それぞれの違いを正しく理解しておくことで、試験対策はもちろん、日常のコーディングでもバグを防ぐことができます。
