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が発生してしまいます。
true
や false
を返却するだけなので、とてもシンプルな標準関数となっております。
公式マニュアル: 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
を使いましょう。という内容でした。
標準関数の仕様を正しく理解してプロジェクトに活用していきましょう。