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
関数との違いを理解し、状況に応じて適切な関数を選択することで、より安全で信頼性の高いコードを書くことができます。
コメント