PHPのarray_key_exists完全解説:使い方からissetとの違いまで

PHPで配列にキーが存在しているか確認する事ができる array_key_exists 関数ですが、使用方法と 変数が存在する isset との明確な違いについて解説していきます。

使用方法

<?php

/*
array_key_exists(
    string|int $key,
    array $array
): bool
*/

$student_scores = array(
    "Alice" => 95,
    "Bob" => 78,
    "Eve" => 89
);

var_dump(array_key_exists('Bob', $student_scores)); // bool(true)
var_dump(array_key_exists('Barby', $student_scores)); // bool(false)
var_dump(array_key_exists('alice', $student_scores)); // bool(false)
var_dump(array_key_exists(0, $student_scores)); // bool(false)
var_dump(array_key_exists(['Alice', 'Bob'], $student_scores)); // PHP Fatal error:  Uncaught TypeError

第1引数に $key として検索したいキー名を指定して

第2引数には検索対象の配列を指定する事でBoolean型が返却されます。

注意点としては第1引数には配列の指定ができないという事です。複数のキーを一度に検索することはできないので、Fatal errorが発生してしまいます。

truefalse を返却するだけなので、とてもシンプルな標準関数となっております。

公式マニュアル: https://www.php.net/manual/ja/function.array-key-exists.php

issetとの違い

配列の中にキーが存在するかを確認するだけであれば isset 関数でも確認することができ、より幅広い用途に対応できる利点があるため array_key_exists関数は使う必要が無いと感じる人もいるかもしれません。

ですが、isset関数と array_key_exists関数には明確な違いが存在しており、isset関数だけでは確認できないパターンも存在します。

比較するためのコードを以下に記します。

<?php

$student_scores = array(
    "Alice" => 95,
    "Bob" => 78,
    "Eve" => 89,
    "Jon" => null
);

var_dump(isset($student_scores["Alice"])); // bool(true)
var_dump(array_key_exists("Jon", $student_scores)); // bool(true)
var_dump(isset($student_scores["Jon"])); // bool(false)

isset関数は nullを検知した場合には trueを返さないため、配列のキーが存在していても値がnullであれば false として判定してしまいます。

このため、値にnullが入る可能性がある配列のキーの存在を確認するためには、 array_key_existsを使う事が推奨されます。

終わりに

以上、array_key_existsの使い方とissetとの違いをまとめました。

issetではnullを検知した場合にfalseと判定してしまうので、nullが想定される場合ですとarray_key_existsを使いましょう。という内容でした。

標準関数の仕様を正しく理解してプロジェクトに活用していきましょう。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA