PHPのarray_key_exists関数!指定キーがあるか確認する

PHPのarray_key_exists関数について書いています。

PHPで配列を扱っていると、「キーが本当に配列の中に存在するかな?」と確認したい場面がありますよね。
特に、外部からの入力データやAPIレスポンスなど、内容が不確定な配列を扱う際には、キーの存在チェックは必須です。

そんな時に役立つのが、PHPの標準関数である array_key_exists関数です。
今回は、このarray_key_exists関数の使い方などについて解説していきます。

array_key_exists関数とは?

array_key_exists 関数は、指定したキーが配列の中に存在するかどうかを確認するための関数です。

基本的な構文

bool array_key_exists ( mixed $key, array $array )

引数

  • $key: 存在を確認したいキーを指定します。数値または文字列を指定できます。
  • $array: 対象となる配列を指定します。

返り値

$key$array内に存在すればtrueを、存在しなければfalseを返します。

array_key_existsの使い方

実際にarray_key_exists関数を使ってみます。

<?php

$fruits = [
    'apple' => 'りんご',
    'orange' => 'みかん',
    'grape' => 'ぶどう'
];

if (array_key_exists('apple', $fruits)) {
    echo "キー'apple'は配列 \$fruits に存在します。\n";
    echo "値は: " . $fruits['apple'] . "\n";
} else {
    echo "キー'apple'は配列 \$fruits に存在しません。\n";
}

if (array_key_exists('banana', $fruits)) {
    echo "キー'banana'は配列 \$fruits に存在します。\n";
} else {
    echo "キー'banana'は配列 \$fruits に存在しません。\n";
}

?>

$fruits配列を作成しています。

そして、$fruits配列にキーが存在するか、array_key_exists関数で確認しています。
最初に’apple’というキーが存在するか確認し、’apple’は存在するのでtrueが返ります。

次に’banana’というキーが存在するかを確認し、’banana’は存在しないのでfalseが返ります。
結果を確認すると、下記のように存在する場合だけtrueが返ってきたことが確認できました。

実行結果

キー'apple'は配列 $fruits に存在します。
値は: りんご
キー'banana'は配列 $fruits に存在しません。

キーの値がnullのとき

array_key_exists関数ではキーが存在すれば、その値がnullであってもtrueを返します。

<?php

$data = [
    'id' => 123,
    'name' => null, // 値が null のキー
    'status' => 'active'
];

// 'name' キーが存在するか確認
if (array_key_exists('name', $data)) {
    echo "キー'name'は配列 \$data に存在します。\n";
    // ただし、値は null の可能性があります
    var_dump($data['name']);
} else {
    echo "キー'name'は配列 \$data に存在しません。\n";
}

?>

$data配列を作成して、array_key_exists関数でキーを確認しています。
‘name’キーの値は null ですが、キー自体は配列$dataに存在するため、array_key_existstrueを返します。

実行結果

キー'name'は配列 $data に存在します。
NULL

isset関数との違い

キーの存在を確認する関数として、isset関数もよく使われます。
isset関数は、変数がセットされており、かつnullでない場合にtrueを返します。

配列のキーに対してisset関数を使う場合、以下のようになります。

<?php

$data = [
    'id' => 123,
    'name' => null,
    'status' => 'active'
];

// isset() で 'name' キーを確認
if (isset($data['name'])) {
    echo "isset(\$data['name']) は true です。\n";
} else {
    echo "isset(\$data['name']) は false です。\n"; // こちらが実行される
}

// isset() で 'status' キーを確認
if (isset($data['status'])) {
    echo "isset(\$data['status']) は true です。\n"; // こちらが実行される
} else {
    echo "isset(\$data['status']) は false です。\n";
}

// isset() で存在しない 'email' キーを確認
if (isset($data['email'])) {
    echo "isset(\$data['email']) は true です。\n";
} else {
    echo "isset(\$data['email']) は false です。\n"; // こちらが実行される
}

?>

isset($data['name'])の結果がfalseになる点に注目してください。
これは、$data['name']の値がnullだからです。

$data['name']に対して、array_key_exists関数を使った場合は、キーがあるためtrueになります。

実行結果

isset($data['name']) は false です。
isset($data['status']) は true です。
isset($data['email']) は false です。

array_key_exists関数とisset関数の使い分け

  • キーの存在そのものを厳密に確認したい場合: array_key_exists関数を使います。値が null かどうかは問いません。
  • キーが存在し、かつ値が null でないことを確認したい場合: isset関数を使います。null 値を「存在しない」ものとして扱いたい場合に便利です。

一般的に、配列のキーにアクセスする前にisset関数でチェックする方が、Undefined array keyエラーと null 値の両方を一度に避けられるため、コードがシンプルになることが多いです。
しかし、「キーが存在すること」と「値がnullでないこと」を区別したい場合には、array_key_exists関数が必要になります。

まとめ

PHPのarray_key_exists関数は、配列内に特定のキーが存在するかどうかを確実にチェックするための便利な関数です。
特に、キーの値がnullである可能性があり、それでもキーの存在自体を確認したい場合に役立ちます。

isset関数との違いを理解し、状況に応じて適切な関数を選択することで、より安全で信頼性の高いコードを書くことができます。

PHP

コメント