【PHP8.x】key_exists関数の使い方

作成日: 更新日:

key_exists関数は、指定されたキーが配列に存在するかどうかを確認する関数です。PHP 8において、配列のキーの存在を確認するために使用されます。この関数は、連想配列(キーと値のペアを持つ配列)や、通常のインデックス配列に対して利用可能です。

具体的には、第一引数に確認したいキー、第二引数にキーの存在をチェックする配列を指定します。キーは文字列型または整数型で指定できます。key_exists関数は、指定されたキーが配列に存在する場合に true を、存在しない場合に false を返します。

この関数は、isset関数と似ていますが、isset関数とは動作が異なります。isset関数は、キーが存在し、かつその値がNULLでない場合に true を返しますが、key_exists関数はキーが存在するだけで true を返します。つまり、配列のキーが存在し、その値がNULLであっても、key_exists関数は true を返します。

例えば、配列 $my_array にキー 'name' が存在するかどうかを確認するには、key_exists('name', $my_array) のように記述します。

key_exists関数は、配列のキーの存在を確実に確認する必要がある場合に役立ちます。特に、値がNULLである可能性がある場合に、isset関数の代わりに利用することで、意図しない動作を防ぐことができます。配列操作において、キーの存在確認は重要な処理の一つであり、key_exists関数はそのための信頼性の高いツールとして活用できます。

基本的な使い方

構文(syntax)

key_exists(mixed $key, array $array): bool

引数(parameters)

string|int $key, array $array

  • string|int $key: 検索したいキーの名前または数値
  • array $array: キーが存在するかどうかを調べる配列

戻り値(return)

bool

配列内に指定したキーが存在するかどうかを判定し、存在する場合は TRUE、存在しない場合は FALSE を返します。

サンプルコード

PHP配列にキーが存在するか確認する

<?php

/**
 * 配列に指定したキーが存在するかどうかを確認するサンプルです。
 *
 * key_exists() 関数は、第2引数の配列に、第1引数で指定したキーが存在するかどうかを
 * bool値 (true または false) で返します。
 *
 * @param string|int $key   検索するキー
 * @param array      $array 検索対象の配列
 */
function checkArrayKey(string|int $key, array $array): void
{
    if (key_exists($key, $array)) {
        // キーが存在する場合の処理
        echo "キー '{$key}' は配列内に存在します。" . PHP_EOL;
    } else {
        // キーが存在しない場合の処理
        echo "キー '{$key}' は配列内に存在しません。" . PHP_EOL;
    }
}

// サンプル用の連想配列
$user = [
    'name' => 'Taro Yamada',
    'age' => 30,
    'job' => null, // キーは存在するが、値は null
];

// --- テストケース ---

// 1. 存在するキー 'name' をチェック
checkArrayKey('name', $user); // 出力: キー 'name' は配列内に存在します。

// 2. 存在しないキー 'address' をチェック
checkArrayKey('address', $user); // 出力: キー 'address' は配列内に存在しません。

// 3. 値が null のキー 'job' をチェック
// key_exists() はキーの存在自体を確認するため、値が null でも true を返します。
// これは、値が null の場合に false を返す isset() との重要な違いです。
checkArrayKey('job', $user); // 出力: キー 'job' は配列内に存在します。

PHPのkey_exists()関数は、指定したキーが配列の中に存在するかどうかを調べるために使用します。この関数は2つの引数を取ります。第1引数には検索したいキー(文字列または整数)を、第2引数には検索対象の配列を指定します。

関数の処理結果として、指定したキーが配列内に存在すればtrue、存在しなければfalseという真偽値が返されます。

サンプルコードでは、$userという連想配列に対してキーの存在を確認しています。存在するキー'name'を調べるとtrueが返り、「存在します」と表示されます。一方、存在しないキー'address'を調べるとfalseが返るため、「存在しません」と表示されます。

特に重要なのは、値がnullであるキー'job'を調べた場合です。key_exists()はキーの存在自体を判定するため、値がnullであってもtrueを返します。これは、キーが存在し、かつ値がnullでない場合にのみtrueを返すisset()との大きな違いであり、キーの存在そのものを厳密に確認したい場合に便利です。

key_exists()関数は、指定したキーが配列に存在するかどうかだけを判定します。サンプルコードの'job'のように、キーに対応する値がnullの場合でも、キー自体が存在すればtrueを返します。これは、キーの存在と値がnullでないことを同時に確認するisset()との大きな違いであり、注意が必要です。フォームの送信データなど、キーが送られてきたか自体を確認したい場面でkey_exists()は有効です。一方で、値がnullでないことを前提に処理を進めたい場合はisset()を使うのが適切です。この2つの関数を目的に応じて正しく使い分けることが、バグの少ないコードを書く上で重要になります。

PHP key_existsでオブジェクトのプロパティをチェックする

<?php

declare(strict_types=1);

// key_exists() は、配列のキーだけでなく、オブジェクトの public なプロパティの
// 存在をチェックするためにも使用できます。

// チェック対象となる stdClass オブジェクトを作成します。
// stdClass は、プロパティを動的に追加できる PHP の標準的な空のクラスです。
$userObject = new stdClass();
$userObject->id = 1;
$userObject->name = 'Taro Yamada';

// --- key_exists() を使用したプロパティの存在チェック ---

// 1. 存在するプロパティ ('name') をチェックします。
$keyToCheck1 = 'name';
if (key_exists($keyToCheck1, $userObject)) {
    echo "プロパティ '{$keyToCheck1}' はオブジェクトに存在します。" . PHP_EOL;
} else {
    echo "プロパティ '{$keyToCheck1}' はオブジェクトに存在しません。" . PHP_EOL;
}

// 2. 存在しないプロパティ ('age') をチェックします。
$keyToCheck2 = 'age';
if (key_exists($keyToCheck2, $userObject)) {
    echo "プロパティ '{$keyToCheck2}' はオブジェクトに存在します。" . PHP_EOL;
} else {
    echo "プロパティ '{$keyToCheck2}' はオブジェクトに存在しません。" . PHP_EOL;
}

// NOTE: オブジェクトのプロパティ存在チェックには、より目的に合った
// `property_exists()` 関数の使用が一般的に推奨されます。
// `key_exists()` は、PHP 8.0.0 以降、オブジェクトに対して使用すると
// 非推奨になる場合があるため注意が必要です。

?>

このPHPコードは、key_exists関数を使い、オブジェクトに特定のプロパティが存在するかどうかを確認する例です。

key_exists関数は、第1引数で指定したキーが、第2引数で指定した配列内に存在するかを判定します。キーが存在する場合はtrue(真)を、存在しない場合はfalse(偽)を戻り値として返します。この関数は、配列だけでなくオブジェクトのpublicなプロパティの存在チェックにも使用できます。

サンプルコードでは、まずidnameのプロパティを持つ$userObjectというオブジェクトを作成しています。最初のif文では、key_exists関数で存在するプロパティ'name'をチェックしているためtrueが返り、「存在します」というメッセージが表示されます。次のif文では、存在しないプロパティ'age'をチェックしているためfalseが返り、「存在しません」というメッセージが表示されます。

注意点として、オブジェクトのプロパティを調べる場合は、より目的に合ったproperty_exists関数を使用することが一般的に推奨されています。

key_exists関数は、本来は配列のキーの存在を調べるための関数ですが、オブジェクトのpublicなプロパティのチェックにも使用できます。しかし、この使い方は推奨されません。PHPのバージョン8.0以降、オブジェクトに対してこの関数を使用すると非推奨の警告が出ることがあり、将来のバージョンでは動作しなくなる可能性があるためです。オブジェクトのプロパティが存在するかを安全かつ明確に確認するためには、専用のproperty_exists()関数を使用してください。これにより、コードの意図が分かりやすくなり、PHPのバージョンアップによる影響を受けにくくなります。

【PHP8.x】key_exists関数の使い方 | いっしー@Webエンジニア