Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

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

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)

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

引数(parameters)

string|int $key, array $array

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

戻り値(return)

bool

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

サンプルコード

key_exists()で配列キーの存在を確認する

1<?php
2
3/**
4 * key_exists() 関数の使用例を示します。
5 * PHPでは array_key_exists() のエイリアスであり、配列内に特定のキーが存在するかどうかを確認します。
6 * キーワード「array_key_exists 非推奨」に関連し、isset() との挙動の違いと使い分けについても説明します。
7 */
8function demonstrateKeyExistsUsage(): void
9{
10    // サンプルとなる配列
11    $data = [
12        'name' => 'Alice',
13        'age' => 30,
14        'email' => null,    // このキーは存在するが、値は null
15        0 => 'first_item',  // 整数キー
16    ];
17
18    echo "--- 'name' キーのチェック (存在する、nullではない) ---\n";
19    // 'name' キーは存在し、値は null ではありません。
20    if (key_exists('name', $data)) {
21        echo "key_exists('name'): true - キー 'name' は存在します。\n";
22    }
23    // isset() も、キーが存在し値が null でない場合に true を返します。
24    if (isset($data['name'])) {
25        echo "isset(\$data['name']): true - キー 'name' は存在し、null ではありません。\n";
26    }
27
28    echo "\n--- 'email' キーのチェック (存在する、null) ---\n";
29    // 'email' キーは存在するが、値が null です。
30    // key_exists() は値が null であっても、キーが存在すれば true を返します。
31    if (key_exists('email', $data)) {
32        echo "key_exists('email'): true - キー 'email' は存在します (値が null でも true)。\n";
33    }
34    // isset() は値が null の場合、false を返します。
35    if (isset($data['email'])) {
36        echo "isset(\$data['email']): true - キー 'email' は存在し、null ではありません。\n";
37    } else {
38        echo "isset(\$data['email']): false - キー 'email' は存在しないか、null です。\n";
39    }
40
41    echo "\n--- 'address' キーのチェック (存在しない) ---\n";
42    // 'address' キーは存在しません。
43    if (!key_exists('address', $data)) {
44        echo "key_exists('address'): false - キー 'address' は存在しません。\n";
45    }
46    // 存在しないキーに対して isset() も false を返します。
47    if (!isset($data['address'])) {
48        echo "isset(\$data['address']): false - キー 'address' は存在しないか、null です。\n";
49    }
50
51    echo "\n--- 整数キー '0' のチェック ---\n";
52    // 整数キーも key_exists() でチェックできます。
53    if (key_exists(0, $data)) {
54        echo "key_exists(0): true - キー '0' は存在します。\n";
55    }
56
57    // 補足: array_key_exists と key_exists、そして isset() について
58    // key_exists() は array_key_exists() のエイリアスであり、全く同じ機能を提供します。
59    // 「array_key_exists 非推奨」というキーワードがありますが、PHPの公式ドキュメントでは
60    // array_key_exists() (したがって key_exists() も) 非推奨とはされていません。
61    // ただし、値が null のキーの存在を確認する際に isset() との挙動が異なるため、
62    // 多くの場合、`isset()` を使うことが推奨されることがあります。
63    // - `key_exists($key, $array)`: 指定したキーが配列に存在すれば (値が null であっても) true を返す。
64    // - `isset($array[$key])`: 指定したキーが存在し、かつその値が null でない場合に true を返す。
65    // どちらを使うかは、**「キーの存在のみを確認したいか」** (key_exists) と、
66    // **「キーの存在かつ値が null でないことを確認したいか」** (isset) によって使い分けることが重要です。
67    // キーが null 値でも存在することを確認したい場合は、key_exists() が正しい選択です。
68}
69
70// サンプル関数の実行
71demonstrateKeyExistsUsage();

PHPのkey_exists()関数は、指定した配列内に特定のキーが存在するかどうかを確認する際に使用します。この関数は、チェックしたいキー(文字列または整数)と対象の配列を引数として受け取ります。キーが存在すればtrue、存在しなければfalseをブール値として返します。

key_exists()は、array_key_exists()関数のエイリアスであり、両者は全く同じ機能を提供します。この関数は、キーが存在していれば、そのキーに関連付けられた値がnullであってもtrueを返します。

これに対し、よく似た目的で使われるisset()関数は、指定したキーが存在し、かつそのキーの値がnullではない場合のみtrueを返します。例えば、配列に'email' => nullという要素がある場合、key_exists('email', $array)trueですが、isset($array['email'])falseとなります。

したがって、単にキーの存在だけを確認したい場合はkey_exists()を、キーが存在し、かつその値がnullではないことを同時に確認したい場合はisset()を使い分けることが重要です。「array_key_exists 非推奨」というキーワードはありますが、PHPの公式ドキュメントでkey_exists()array_key_exists()が非推奨とされているわけではありません。両者の挙動の違いを理解し、目的に合わせて適切に選択することで、意図しないバグを防ぎ、より堅牢なコードを記述できます。

key_exists() 関数は、配列内に指定したキーが存在するかを判定します。最も重要な注意点は、isset() 関数との違いです。key_exists() はキーが存在すれば、その値が null であっても true を返しますが、isset() はキーが存在しても値が null の場合は false を返します。そのため、キーが存在するだけで値の有無は問わない場合は key_exists() を、キーが存在しかつ値が null でないことを確認したい場合は isset() を使うように使い分けが必要です。なお、key_exists()array_key_exists() のエイリアスであり、機能は全く同じです。両者とも非推奨ではありませんので、目的に合わせて適切に利用してください。

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

1<?php
2
3/**
4 * 配列に指定したキーが存在するかどうかを確認するサンプルです。
5 *
6 * key_exists() 関数は、第2引数の配列に、第1引数で指定したキーが存在するかどうかを
7 * bool値 (true または false) で返します。
8 *
9 * @param string|int $key   検索するキー
10 * @param array      $array 検索対象の配列
11 */
12function checkArrayKey(string|int $key, array $array): void
13{
14    if (key_exists($key, $array)) {
15        // キーが存在する場合の処理
16        echo "キー '{$key}' は配列内に存在します。" . PHP_EOL;
17    } else {
18        // キーが存在しない場合の処理
19        echo "キー '{$key}' は配列内に存在しません。" . PHP_EOL;
20    }
21}
22
23// サンプル用の連想配列
24$user = [
25    'name' => 'Taro Yamada',
26    'age' => 30,
27    'job' => null, // キーは存在するが、値は null
28];
29
30// --- テストケース ---
31
32// 1. 存在するキー 'name' をチェック
33checkArrayKey('name', $user); // 出力: キー 'name' は配列内に存在します。
34
35// 2. 存在しないキー 'address' をチェック
36checkArrayKey('address', $user); // 出力: キー 'address' は配列内に存在しません。
37
38// 3. 値が null のキー 'job' をチェック
39// key_exists() はキーの存在自体を確認するため、値が null でも true を返します。
40// これは、値が null の場合に false を返す isset() との重要な違いです。
41checkArrayKey('job', $user); // 出力: キー 'job' は配列内に存在します。
42

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でオブジェクトのプロパティをチェックする

1<?php
2
3declare(strict_types=1);
4
5// key_exists() は、配列のキーだけでなく、オブジェクトの public なプロパティの
6// 存在をチェックするためにも使用できます。
7
8// チェック対象となる stdClass オブジェクトを作成します。
9// stdClass は、プロパティを動的に追加できる PHP の標準的な空のクラスです。
10$userObject = new stdClass();
11$userObject->id = 1;
12$userObject->name = 'Taro Yamada';
13
14// --- key_exists() を使用したプロパティの存在チェック ---
15
16// 1. 存在するプロパティ ('name') をチェックします。
17$keyToCheck1 = 'name';
18if (key_exists($keyToCheck1, $userObject)) {
19    echo "プロパティ '{$keyToCheck1}' はオブジェクトに存在します。" . PHP_EOL;
20} else {
21    echo "プロパティ '{$keyToCheck1}' はオブジェクトに存在しません。" . PHP_EOL;
22}
23
24// 2. 存在しないプロパティ ('age') をチェックします。
25$keyToCheck2 = 'age';
26if (key_exists($keyToCheck2, $userObject)) {
27    echo "プロパティ '{$keyToCheck2}' はオブジェクトに存在します。" . PHP_EOL;
28} else {
29    echo "プロパティ '{$keyToCheck2}' はオブジェクトに存在しません。" . PHP_EOL;
30}
31
32// NOTE: オブジェクトのプロパティ存在チェックには、より目的に合った
33// `property_exists()` 関数の使用が一般的に推奨されます。
34// `key_exists()` は、PHP 8.0.0 以降、オブジェクトに対して使用すると
35// 非推奨になる場合があるため注意が必要です。
36
37?>

この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のバージョンアップによる影響を受けにくくなります。

key_existsとarray_key_existsの比較

1<?php
2
3/**
4 * key_exists と array_key_exists の動作を比較するサンプル。
5 *
6 * この関数は、PHP 8 における key_exists と array_key_exists が
7 * どのように機能し、両者が実質的に同じ動作をすることを示すために使用されます。
8 * key_exists は array_key_exists のエイリアス(別名)です。
9 *
10 * @param string|int $key チェックするキー
11 * @param array $array キーの存在をチェックする対象の配列
12 */
13function demonstrateKeyExistenceComparison(string|int $key, array $array): void
14{
15    echo "--- キー: '{$key}' (型: " . gettype($key) . ") の存在チェック ---\n";
16    echo "対象配列: " . json_encode($array, JSON_UNESCAPED_UNICODE) . "\n";
17
18    // key_exists を使用してキーの存在を確認します。
19    // PHP 8 では、これは array_key_exists のエイリアスです。
20    $existsByKeyExists = key_exists($key, $array);
21    echo "key_exists('{$key}', \$array) の結果: ";
22    var_dump($existsByKeyExists);
23
24    // array_key_exists を使用してキーの存在を確認します。
25    // こちらが一般的に推奨される関数です。
26    $existsByArrayKeyExists = array_key_exists($key, $array);
27    echo "array_key_exists('{$key}', \$array) の結果: ";
28    var_dump($existsByArrayKeyExists);
29
30    // 両関数の結果を比較し、同じ結果が得られることを確認します。
31    if ($existsByKeyExists === $existsByArrayKeyExists) {
32        echo "=> 結論: key_exists と array_key_exists は同じ結果を返しました。\n";
33    } else {
34        echo "=> 警告: key_exists と array_key_exists で異なる結果が返されました!\n";
35    }
36    echo "\n";
37}
38
39// ----------------------------------------------------
40// デモンストレーションの実行
41// ----------------------------------------------------
42
43// テスト用の配列を定義します。
44$sampleArray = [
45    'username' => 'php_user',
46    'age' => 30,
47    'isAdmin' => false,
48    'config' => null, // 値が null のキー
49    100 => 'hundred', // 整数キー
50    'data' => [
51        'item1' => 'value1',
52    ],
53];
54
55// シナリオ1: 存在する文字列キー
56demonstrateKeyExistenceComparison('username', $sampleArray);
57
58// シナリオ2: 存在しない文字列キー
59demonstrateKeyExistenceComparison('email', $sampleArray);
60
61// シナリオ3: 値が null の存在するキー
62// key_exists/array_key_exists は値が null でもキーがあれば true を返します。
63demonstrateKeyExistenceComparison('config', $sampleArray);
64
65// シナリオ4: 存在する整数キー
66demonstrateKeyExistenceComparison(100, $sampleArray);
67
68// シナリオ5: 存在しない整数キー
69demonstrateKeyExistenceComparison(500, $sampleArray);
70
71// シナリオ6: 配列が空の場合
72demonstrateKeyExistenceComparison('any_key', []);
73
74// シナリオ7: ネストされた配列のキーをトップレベルでチェック
75// ネストされた配列のキーは、トップレベルでは存在しないと判断されます。
76demonstrateKeyExistenceComparison('item1', $sampleArray);

PHPのkey_exists関数は、指定された配列の中に特定のキーが存在するかどうかを確認するために使用されます。この関数は、第一引数に検索したいキー(文字列または整数)を、第二引数にキーの存在をチェックする対象の配列を受け取ります。キーが存在すればtrueを、存在しなければfalseを論理値として返します。特に、キーの値がnullである場合でも、キー自体が存在していればtrueを返します。

PHP 8において、key_existsarray_key_exists関数のエイリアス(別名)として動作します。そのため、両者は完全に同じ挙動を示し、どちらを使用しても同じ結果が得られます。一般的には、関数名から意図がより明確に伝わるarray_key_existsの使用が推奨されています。

サンプルコードでは、存在するキー(例: 'username'100、値がnull'config')に対してはkey_existsarray_key_existsの両方がtrueを返すことを示しています。一方、存在しないキー(例: 'email'500)や、ネストされた配列のキー(例: 'item1')をトップレベルで検索した場合にはfalseを返します。このように、key_exists関数は配列のキーの有無を正確に判定する際に非常に有用です。

key_existsはPHP 8でarray_key_existsのエイリアス(別名)として、まったく同じ動作をします。混乱を避けるため、一般的にはarray_key_existsを使用することをお勧めします。この関数は、配列内に指定されたキーが存在するかどうかのみを判断し、そのキーの値がnullであってもtrueを返します。値の有無まで含めて確認したい場合はisset()などの関数との違いに注意が必要です。また、ネストされた配列の内部キーは直接チェックできないため、キーのパス全体を一度に指定することはできません。キーとして指定できるのは文字列または整数型です。

関連コンテンツ

関連プログラミング言語