こんにちは!エンジニアのノムラです。
PHPでは配列の要素の中から指定したキーや値が存在するか?調べるための関数が用意されています。
この記事では、
【基礎】複数キーを指定して検索する
【応用】isset関数との違い
【応用】その他配列を検索する関数
といった流れで解説をしていきたいと思います。
今回はarray_key_exists関数の使用方法について、わかりやすく解説します!
array_key_exists関数とは
指定したキーまたは、添字が配列に存在するか調べるには、array_key_exists関数を使用します。
array_key_exists関数は以下のように記述します。
書き方:
array_key_exists ( $キー名 , $配列名 )
引数:
第一引数には検索するキー名を指定します。
第二引数には配列名を指定します。
返り値:
指定したキー名が配列内に存在している場合はTRUEを返します。
指定したキー名が存在しない場合はFALSEを返します。
array_key_exists関数の使い方
ここではarray_key_exists関数の使い方を見ていきましょう。
以下にarray_key_exists関数を使用して「指定したキー名が存在するか?」調べるサンプルを紹介します。
サンプルプログラム
//配列を定義 $fruits = [ 'apple'=>'100円', 'orange'=>'80円', 'pineapple'=>'300円' ]; //検索するキー $fruits_key = 'orange'; //array_key_existsで配列のキーを検索する if (array_key_exists($fruits_key, $fruits)){ echo $fruits_key.'は存在します'; }else{ echo $fruits_key.'は存在しません'; }
実行結果:
orangeは存在します
実行結果のとおり、指定したキー名orangeは配列に存在しますので、array_key_exists関数はTRUEを返します。
なお、array_key_exists関数は最初のレベルのキーのみを検索するため、多次元配列の多重構造(ネスト)の配列のキーは見つけられません。
複数キーを指定して検索する
array_key_exists関数は、基本的に1つの配列に対して1つのキーの配列のみしか検索することができません。
そのため、複数キーを指定して検索したい場合は、
・if文をAND条件にして検索する方法
・if文をネストして検索する方法
などがあります。
以下にarray_key_exists関数を使用して、if文のAND条件で複数キーを指定するサンプルを紹介します。
サンプルプログラム
//配列を定義 $fruits = [ 'apple'=>'100円', 'orange'=>'80円', 'banana'=>'150円', 'pineapple'=>'300円', 'mango'=>'200円' ]; //検索するキー $fruits_key1 = 'orange'; $fruits_key2 = 'mango'; //array_key_existsで配列のキーを検索する if (array_key_exists($fruits_key1, $fruits) and array_key_exists($fruits_key2, $fruits)){ echo $fruits_key1.'と'.$fruits_key2.'は存在します'; }else{ echo $fruits_key1.'は存在しません'; }
実行結果:
orangeとmangoは存在します
サンプルではif文のAND条件を使用して、array_key_exists関数にぞれぞれ検索キーを指定しています。
issetとの違い
PHPには、array_key_exists関数と同じような機能をもつ関数isset関数があります。
どちらも配列のキーを検索する関数ですが、全く同じというわけではありません。
ここでは、array_key_exists関数とisset関数の違いについて解説していきたいと思います。
機能の違い
array_key_exists関数とisset関数の大きな機能の違いとして、NULLに対してfalseを返すか、trueを返すかということが挙げられます。
結論から言うと、array_key_exists関数は配列の値がNULLでもtrueを返しますが、isset関数はfalseを返します。
実際にサンプルプログラムで確認してみましょう。
<?php $fruits = ['red'=>'イチゴ', 'yellow'=>'レモン', 'green'=>'', 'blue'=>NULL];
例えばこのような配列があったとして、array_key_exists関数とisset関数でキーが存在しているか確認します。
この配列をarray_key_exists関数を使ってキーを調べていくと結果は以下のようになります。
array_key_exists関数 | 実行結果 |
---|---|
array_key_exists('red',$fruits) | true |
array_key_exists('yellow',$fruits) | true |
array_key_exists('green',$fruits) | true |
array_key_exists('blue’',$fruits) | true |
isset関数 | 実行結果 |
---|---|
isset($fruits['red']) | true |
isset($fruits['yellow']) | true |
isset($fruits['green']) | true |
isset($fruits['blue']) | false |
値が定義されている場合、空の場合はどちらもtrueが返ってきていますが、値がNULLの場合、array_key_exists関数はtrue、isset関数はfalseが返ってきています。
配列にNULLが入ることはないと確定しているならisset関数を使っても心配はありませんが、少しでも心配があるならarray_key_exists関数を使った方がいいかもしれません。
速度の違い
次に速度の違いをみていきましょう。
配列の操作は、プログラムのさまざまな用途で使用する非常に重要な処理と言えます。
ここでは、array_key_exists関数とisset関数で、それぞれどちらの検索処理が早いか?パフォーマンスを比較してみました。
比較にはmicrotime関数を使用し、ループの中で100000回配列の要素を追加し、指定した配列のキーをどちらが早く検索できるか比較しています。
サンプルプログラム
<?php //要素を100000回追加する for ($i = 0 ; $i < 100000 ; $i++){ $array_value[] = $i; } //検索するキー $key = '60000'; //array_key_exists関数 $start1 = microtime(true); if (array_key_exists($key, $array_value)){ $end1 = microtime(true) - $start1; echo 'array_key_exists : '.$end1 .'秒'; echo '<br>'; } //isset関数 $start2 = microtime(true); if (isset($array_value[$key])){ $end2 = microtime(true) - $start2; echo 'isset : '.$end2 .'秒'; } ?>
実行結果:
実行結果:1回目 array_key_exists : 3.09944152832E-6秒 isset : 1.90734863281E-6秒 実行結果:2回目 array_key_exists : 6.91413879395E-6秒 isset : 2.14576721191E-6秒 実行結果:3回目 array_key_exists : 2.86102294922E-6秒 isset : 1.90734863281E-6秒
検索に要した時間にばらつきがありますが、概ねisset関数のほうが検索結果が早い印象でした。
isset関数の使い方については、以下の記事でも詳しく解説していますので、ぜひ参考にしてください!
array関数についてもっと詳しく知りたい方へ
PHPには他にも配列を扱う関数が多くあります。
以下の記事では、
- 配列の値を検索する方法
- 多次元配列を検索する方法
- 正規表現を使用して検索する方法
など、配列の値を検索する方法などが解説されています。
配列を扱う場面はたくさんあると思うので、ぜひ参考にしてください!
まとめ
ここではarray_key_exists関数を使用して、
- 配列のキーを調べる基本的な方法
- 複数キーの指定方法の解説
- isset関数との違い
などについて解説しました。
array_key_exists関数は、配列の中に指定したキーが存在するか調べるときに便利ですので、使い方についてはしっかりと覚えておきましょう!
もし、array_key_exists関数の使用方法を忘れてしまったら、この記事を思い出してくださいね!