【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()
を使うのが一般的です。この違いを理解し、目的に応じて正しく使い分けることが重要です。引数の順序が (キー, 配列)
である点も忘れないようにしましょう。