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

作成日: 更新日:

array_key_exists関数は、指定されたキーまたはインデックスが配列に存在するかどうかを確認する関数です。この関数は、配列の中に特定のキーが存在するかどうかを検証する必要がある場合に非常に役立ちます。array_key_exists関数は、キーが存在する場合にtrueを返し、存在しない場合にfalseを返します。

この関数は、isset()関数と似ていますが、isset()がキーが存在し、かつNULLでない場合にtrueを返すのに対し、array_key_exists()はキーが存在するだけでtrueを返します。つまり、配列の要素がNULLである場合でも、array_key_exists()trueを返します。

array_key_exists()関数の構文は array_key_exists(mixed $key, array $array): bool です。$key引数には検索するキーまたはインデックスを指定し、$array引数には検索対象の配列を指定します。$keyには文字列または整数を指定できます。

例えば、連想配列で特定のキーが存在するかどうかを確認する場合や、数値添字配列で特定のインデックスが存在するかどうかを確認する場合に使用できます。データベースから取得したデータに基づいて配列を作成し、特定のフィールドが存在するかどうかを検証する際などにも活用できます。array_key_exists()関数を使用することで、存在しないキーにアクセスするエラーを回避し、より堅牢なコードを作成することができます。

基本的な使い方

構文(syntax)

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

引数(parameters)

string|int $key, array $array

  • string|int $key: 検索したい配列のキーを指定します。文字列または整数を指定できます。
  • array $array: キーが存在するかどうかを検索する対象の配列を指定します。

戻り値(return)

bool

指定されたキーが配列内に存在するかどうかを真偽値(trueまたはfalse)で返します。

サンプルコード

PHP: array_key_existsとissetの違いを比較する

<?php

/**
 * array_key_exists() と isset() の挙動の違いを比較します。
 *
 * array_key_exists() は、配列内に指定したキーが存在するかどうかを純粋にチェックします。
 * 一方、isset() は、キーが存在し、かつその値が null でない場合にのみ true を返します。
 * この違いは、キーは存在するが値が null の場合に顕著になります。
 */
function compareKeyCheckFunctions(): void
{
    // テスト用の配列データ
    // 'name' キーは存在するが、値は null
    $data = [
        'id' => 123,
        'name' => null,
    ];

    echo 'チェック対象の配列:' . PHP_EOL;
    print_r($data);
    echo PHP_EOL;

    // --- ケース1: キーが存在し、値が null の場合 ('name') ---
    $key_with_null = 'name';

    // array_key_exists() はキーの存在のみを見るため true を返す
    if (array_key_exists($key_with_null, $data)) {
        echo "[array_key_exists] キー '{$key_with_null}' は存在します。" . PHP_EOL;
    } else {
        echo "[array_key_exists] キー '{$key_with_null}' は存在しません。" . PHP_EOL;
    }

    // isset() は値が null のため false を返す
    if (isset($data[$key_with_null])) {
        echo "[isset] キー '{$key_with_null}' はセットされています。" . PHP_EOL;
    } else {
        echo "[isset] キー '{$key_with_null}' はセットされていません (値がnullのため)。" . PHP_EOL;
    }

    echo '---' . PHP_EOL;

    // --- ケース2: キーが存在しない場合 ('age') ---
    $non_existent_key = 'age';

    // どちらの関数もキーが存在しないため false を返す
    if (array_key_exists($non_existent_key, $data)) {
        echo "[array_key_exists] キー '{$non_existent_key}' は存在します。" . PHP_EOL;
    } else {
        echo "[array_key_exists] キー '{$non_existent_key}' は存在しません。" . PHP_EOL;
    }

    if (isset($data[$non_existent_key])) {
        echo "[isset] キー '{$non_existent_key}' はセットされています。" . PHP_EOL;
    } else {
        echo "[isset] キー '{$non_existent_key}' はセットされていません。" . PHP_EOL;
    }
}

// 関数を実行して結果を表示
compareKeyCheckFunctions();

PHPのarray_key_exists()関数は、配列の中に指定したキーが存在するかどうかを調べるための関数です。第1引数に調べたいキー(文字列または整数)、第2引数に対象となる配列を渡します。戻り値は真偽値(bool)であり、キーが存在すればtrue、存在しなければfalseを返します。

この関数としばしば比較されるものにisset()がありますが、両者の挙動には重要な違いがあります。それは、キーに対応する値がnullの場合の扱いです。array_key_exists()はキーの存在そのものをチェックするため、値がnullであってもキーが存在すればtrueを返します。対してisset()は、キーが存在し、かつその値がnullではない場合にのみtrueを返します。

サンプルコードでは、値がnull'name'キーをチェックしています。この場合、array_key_exists()trueを返しますが、isset()は値がnullのためfalseを返します。一方で、存在しない'age'キーに対しては、どちらもfalseを返します。このように、値がnullのキーの存在を明確に確認したい場面でarray_key_exists()は有効です。

array_key_exists()は、指定したキーが配列に存在するかどうかだけを判定します。一方、isset()はキーが存在し、かつその値がnullでない場合にのみtrueを返します。このため、サンプルコードの'name' => nullのように、キーは存在するが値がnullの場合に両者の結果が異なります。意図的にnullを値として許容する配列で、キーの存在そのものを厳密に確認したい場合はarray_key_exists()を使用してください。値がnullでないことを確認して安全に処理を進めたい場合はisset()が適しています。一般的にisset()の方が高速に動作するため、null値を考慮する必要がない場合はisset()の使用が推奨されます。

PHP array_key_exists でキーの存在をチェックする

<?php

/**
 * array_key_exists の使い方を示すサンプルコードです。
 *
 * array_key_exists 関数は、配列内に特定のキーが存在するかどうかをチェックします。
 * キーに対応する値が null であっても、キーが存在すれば true を返します。
 *
 * 【キーワード「非推奨」について】
 * array_key_exists 関数自体はPHP 8において非推奨ではありません。
 * ただし、キーが存在し、かつその値が null でないことを確認したい場合は、
 * isset() 関数を使用する方が一般的です。isset() は、キーが存在しないか、
 * または値が null の場合に false を返します。
 * どちらを使用するかは、あなたのコードが「キーの存在のみ」を確認したいのか、
 * それとも「キーが存在し、かつ値が null でないこと」を確認したいのかによって選択します。
 */
function demonstrateArrayKeyExistsUsage(): void
{
    // サンプル配列を定義
    $data = [
        'user_id' => 101,
        'username' => 'php_user',
        'email' => null, // キーは存在するが値は null
        0 => 'first_element'
    ];

    echo "--- array_key_exists の基本的な使用例 ---\n";

    // 存在するキー 'username' の確認
    if (array_key_exists('username', $data)) {
        echo "✅ 'username' キーは存在します。\n";
    } else {
        echo "❌ 'username' キーは存在しません。\n";
    }

    // 値が null のキー 'email' の確認
    if (array_key_exists('email', $data)) {
        echo "✅ 'email' キーは存在します (値は null)。\n";
    } else {
        echo "❌ 'email' キーは存在しません。\n";
    }

    // 存在しないキー 'password' の確認
    if (array_key_exists('password', $data)) {
        echo "✅ 'password' キーは存在します。\n";
    } else {
        echo "❌ 'password' キーは存在しません。\n";
    }

    // 数値キー 0 の確認
    if (array_key_exists(0, $data)) {
        echo "✅ 数値キー '0' は存在します。\n";
    } else {
        echo "❌ 数値キー '0' は存在しません。\n";
    }

    echo "\n--- array_key_exists と isset() の違い ---\n";

    // キー 'email' (値が null) での違い
    echo "キー 'email' (値は null):\n";
    echo "  array_key_exists('email', \$data) の結果: " . (array_key_exists('email', $data) ? 'true' : 'false') . "\n";
    echo "  isset(\$data['email']) の結果: " . (isset($data['email']) ? 'true' : 'false') . "\n";

    // キー 'user_id' (値が存在) での違い
    echo "\nキー 'user_id' (値は 101):\n";
    echo "  array_key_exists('user_id', \$data) の結果: " . (array_key_exists('user_id', $data) ? 'true' : 'false') . "\n";
    echo "  isset(\$data['user_id']) の結果: " . (isset($data['user_id']) ? 'true' : 'false') . "\n";

    // 存在しないキー 'phone' での違い
    echo "\n存在しないキー 'phone':\n";
    echo "  array_key_exists('phone', \$data) の結果: " . (array_key_exists('phone', $data) ? 'true' : 'false') . "\n";
    echo "  isset(\$data['phone']) の結果: " . (isset($data['phone']) ? 'true' : 'false') . "\n";
}

// 関数を実行
demonstrateArrayKeyExistsUsage();

array_key_exists関数は、指定した配列の中に、特定のキーが存在するかどうかを確認するためのPHP関数です。第一引数に確認したいキー(文字列または整数)、第二引数に対象となる配列を指定します。指定したキーが配列内に存在すればtrueを、存在しなければfalseを返します。

この関数の重要な特徴は、キーに対応する値がnullであっても、キー自体が存在すればtrueを返す点です。サンプルコードでは、値がnullである'email'キーを確認した際にtrueが返されることで、この挙動を示しています。これは、キーが存在しない場合や値がnullの場合にfalseを返すisset()との大きな違いです。

array_key_exists関数自体は非推奨ではありませんが、isset()と適切に使い分けることが重要です。「キーの存在そのもの」を厳密にチェックしたい場合にこの関数を使用し、「キーが存在し、かつ値がnullでないこと」を確認したい場合はisset()を使用するのが一般的です。

array_key_exists関数は、キーに対応する値がnullであっても、キー自体が存在すればtrueを返します。これが、isset()との最も大きな違いです。isset()はキーが存在しない場合だけでなく、値がnullの場合もfalseを返すため注意が必要です。

したがって、「キーの存在そのもの」を厳密に確認したい場合にこの関数を使用します。例えば、フォームから送信されたデータに特定の項目が含まれているか(値が空でも)をチェックする際に便利です。一方、「キーが存在し、かつ有効な値がセットされていること」を確認したい場合はisset()を使うのが一般的です。この違いを理解し、目的に応じて正しく使い分けることが重要です。引数の順序が (キー, 配列) である点も忘れないようにしましょう。

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