《PHP8上級試験対策》in_array / array_key_exists / isset の違いを徹底整理

  • URLをコピーしました!

はじめに

PHP で「配列に値やキーが存在するか」を調べる方法として、in_array()・array_key_exists()・isset() の3つがあります。
一見似ている関数ですが、それぞれ挙動が異なり、試験問題でもよく出題されます。
この記事では、実際のコードと出力結果を通して違いを整理します。

キーワード: in_array / array_key_exists / isset / 配列 / 厳密比較

目次

in_array()関数

in_array()配列の値に needle が含まれるかどうか を調べます。第3引数の stricttrue の場合は 型も比較 されます。

$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_arrayarray_key_existsisset
'2' として入っているときに 2 を探すtrue (strict=false)false (strict=true)
'key 0' => null無関係true(キーあり)false(null は不可)
'key 1' => 1値として探せばOKtruetrue
存在しないキーfalsefalse

まとめ

  • 値を探すin_array()
  • キーの有無を確認array_key_exists()
  • 値がセットされ null でないかisset()

それぞれの違いを正しく理解しておくことで、試験対策はもちろん、日常のコーディングでもバグを防ぐことができます。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次