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_existsはtrueを返します。
実行結果
キー'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関数との違いを理解し、状況に応じて適切な関数を選択することで、より安全で信頼性の高いコードを書くことができます。

コメント