スライドショー

【PHP入門】array_key_exists関数で配列のキーの有無を調べる

こんにちは!エンジニアのノムラです。

PHPでは配列の要素の中から指定したキーや値が存在するか?調べるための関数が用意されています。

この記事では、

【基礎】array_key_exists関数の使い方
【基礎】複数キーを指定して検索する
【応用】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関数はtrueisset関数は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には他にも配列を扱う関数が多くあります。

以下の記事では、

  • 配列の値を検索する方法
  • 多次元配列を検索する方法
  • 正規表現を使用して検索する方法

など、配列の値を検索する方法などが解説されています。

配列を扱う場面はたくさんあると思うので、ぜひ参考にしてください!

【PHP入門】配列の値を検索するarray_searchと他4つの関数
更新日 : 2019年8月5日

まとめ

ここではarray_key_exists関数を使用して、

  • 配列のキーを調べる基本的な方法
  • 複数キーの指定方法の解説
  • isset関数との違い

などについて解説しました。

array_key_exists関数は、配列の中に指定したキーが存在するか調べるときに便利ですので、使い方についてはしっかりと覚えておきましょう!

もし、array_key_exists関数の使用方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ノムラ

ノムラ

WEBエンジニアをやっています。
プログラミング初心者にもわかりやすく解説ができるよう頑張ります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説