配列を操作する際に、事前に特定の値が含まれているかを確認したい場合があると思います。
PHPには、そうしたケースに対応する関数としてin_array関数が用意されています。
今回の記事では、in_array関数の基本構文や具体的な使用方法などについて詳しく解説していきたいと思います。
in_array関数とは?
in_array関数は、特定の値が配列の中に存在するかどうかを調べるための関数です。
通常、配列の要素に対して何かしらの処理を行う場合は、個々にアクセスしなければいけませんが、
この関数の場合、配列そのものを指定するだけで値が存在するか否かを確認することができます。
ループ処理などを使用する必要が無くなるため、コードを簡潔に済ませることができるメリットがあります。
in_array関数の使い方
in_array関数の詳しい使い方について、順に見ていきましょう。
基本構文
in_array関数を使用する際は、以下のような構文で記述します。
【基本構文】
in_array(検索する値, 検索対象の配列[, 型比較の有無])
第1引数には、検索したい値を指定します。
第2引数には、検索対象とする配列を指定します。
第3引数には、値の型比較を行うか否かを真偽値で指定することができます。
trueを指定した場合は、検索する値の型まで厳密に比較します。デフォルトは falseです。
対象の配列の中に値がある場合は true、無い場合は false を戻り値として返します。
以下のサンプルコードで、実際の動きを見てみましょう。
【サンプルコード】
<?php
$lastname = [
'Yamada',
'Tanaka',
'Sasaki',
'Watanabe',
'Kobayashi'
];
//配列の中に値が存在するか否か
var_dump(in_array('Tanaka', $lastname));
var_dump(in_array('Yamamoto', $lastname));
?>
【実行結果】
bool(true)
bool(false)
値の有無に応じて、結果が true か false のどちらかで返却されています。
関数の戻り値が真偽値のため、if文の条件式に活用することもできます。
【サンプルコード】
<?php
$lastname = [
'Yamada',
'Tanaka',
'Sasaki',
'Watanabe',
'Kobayashi'
];
$searchStr = 'Watanabe';
//関数の結果を元に条件分岐する
if (in_array($searchStr, $lastname)) {
echo $searchStr.'は存在します'."\n";
} else {
echo $searchStr.'は存在しません'."\n";
}
?>
【実行結果】
Watanabeは存在します
チェックする値の型の一致も確認する
in_array関数は、値の型比較を行うかどうかによって、一部の比較結果が変化する場合があります。
例えば、数値と文字列を比較した場合の事例などです。
以下のサンプルコードを見てみてください。
【サンプルコード】
<?php
$numArray = [
'10',
20,
'30',
40
];
var_dump(in_array('10', $numArray));
var_dump(in_array(20, $numArray));
var_dump(in_array(30, $numArray));
var_dump(in_array('40', $numArray));
?>
【実行結果】
bool(true)
bool(true)
bool(true)
bool(true)
同じ型同士を比較した場合と、違う型同士を比較した場合のどちらもありますが、結果は全て true となっています。
このように、型比較を行わずに値を検索することによって、取得結果が意図しないものとなる可能性があります。
より厳密に検索を行いたい場合は、第3引数に trueを指定し、型の比較を行うようにしましょう。
【サンプルコード】
<?php
$numArray = [
'10',
20,
'30',
40
];
var_dump(in_array('10', $numArray));
var_dump(in_array(20, $numArray));
var_dump(in_array(30, $numArray, true));
var_dump(in_array('40', $numArray, true));
?>
【実行結果】
bool(true)
bool(true)
bool(false)
bool(false)
検索対象の値を配列で指定する
in_array関数では、検索する値に配列を指定することもできます。
多次元配列を対象に、特定の配列が存在するかを確認したい場合に有効な方法です。
以下のサンプルコードで、実際の動きを見てみましょう。
【サンプルコード】
<?php
$lastname = [
['Yamada', 'Tanaka', 'Sasaki'],
['Watanabe', 'Kobayashi']
];
$searchName1 = ['Yamada', 'Tanaka', 'Sasaki'];
$searchName2 = ['Watanabe', 'Kobayashi', 'Ito'];
var_dump(in_array($searchName1, $lastname));
var_dump(in_array($searchName2, $lastname));
?>
【実行結果】
bool(true)
bool(false)
上記の結果を見ると分かるように、配列単位で検索を行う場合は、配列内の要素全てが一致しないと結果は false となります。
array_search関数で指定した値のキーを返す
PHPには、in_array関数と似た機能を持つ 「array_search」 という関数が存在します。
array_search関数は、指定した値が存在した場合に、真偽値ではなくその値のキーを返す関数です。
使用の際は、以下の構文で記述します。
【基本構文】
array_search(検索する値, 検索対象の配列[, 型比較の有無])
引数の指定内容は、in_array関数と同じとなります。
戻り値は、上述したように値に対するキー、もしくは false のどちらかを返します。
以下のサンプルコードで、実際の動きを見てみましょう。
【サンプルコード】
<?php
$nameArray = [
'Yamada' => 'Taro',
'Tanaka' => 'Yoko',
'Sasaki' => 'Jiro',
];
var_dump(array_search('Taro', $nameArray));
var_dump(array_search('Hanako', $nameArray));
?>
【実行結果】
string(6) "Yamada"
bool(false)
in_array関数とは異なり、値が配列に存在した場合にキーを返すことが結果からも分かりますね。
値の有無を確認するだけでなく、要素に対応するキーを合わせて取得したい場合には、このように array_search関数を使用するといいでしょう。
まとめ
いかがでしたか?今回は、in_array関数の使い方について解説しました。
in_array関数は、要素の有無によって条件を振り分けたい際などに簡単に値を確認することができる便利な関数です。
実際の開発でも使用する機会が多い関数なので、先ほど紹介した array_search関数と合わせて、ぜひこの機会に使い方を覚えておきましょう!
PHPの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、PHPに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。