column

ITコラム

mv13358

プログラミングノウハウ

2025.04.24

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】

この記事の監修者
江畠 翔太

プログラマーカレッジ講師(元エンジニア)
私自身、プログラミングを試行錯誤しながら学習してきました。その経験から ”どこでつまづくのか” ”どのような説明があればその時理解できたか” ということについて、客観的に把握できていると思います。皆様の「プログラミングを学びたい」という気持ちに精一杯応えていきますので、これから一緒に頑張っていきましょう。よろしくお願いいたします。

PHP の in_array 関数は ある値 が 配列 の中に含まれているかを調べる関数です。
ここでは in_array 関数の基本的な使い方を紹介します。

配列についてはこちらの記事もご参照下さい

PHP【 配列 】複数の値を保持するデータ構造
PHP【 配列 】配列にデータを追加
PHP【 配列 】配列からデータを削除
PHP【 配列 】count で要素数を取得
PHP【 配列 】配列のソート
PHP【 連想配列 】キーでデータを特定
PHP【 多次元配列 】配列の中に配列
PHP【 配列 】配列内のデータ検索
PHP【 配列 】要素を比較
PHP【 配列 】配列の結合
PHP【 配列 】in_array で値の存在チェック(本ページ)
PHP【 配列 】array_map で一括処理
PHP【 配列 】キーを取得
PHP【 配列 】array_filter でフィルター
PHP【 配列 】array_column で同一キーの値を取得
PHP【 配列 】foreach でループ処理
PHP【 配列 】array_unique で重複した値を削除
PHP【 配列 】便利な関数

本サイトでは XAMPP( ザンプ )という開発環境を使用しています。
XAMPP のインストール方法や起動方法については以下の記事をご参照下さい。

なお、未経験からITエンジニアへの就職に興味がある方や未経験からプログラミングを効率よく学びたいと考えている方は、就職率98.3%で受講料無料のプログラミングスクールプログラマカレッジもおすすめです。

最終更新日:2025年4月24日

1. in_array 関数の構文

in_array 関数は、特定の値が検索対象の配列の中に存在するかを調べます。値が存在すれば true、 存在しなければ false を返します。
in_array 関数は以下のように書きます。

in_array(検索する値, 検索対象の配列);

第1引数には検索する値を指定します。
第2引数には検索対象となる配列を指定します。

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

▲目次へ戻る

2. in_array 関数のサンプル

実際に in_array 関数を使用して 配列内に特定の値があるかどうか検索してみます。

<?php
// 配列を定義
$fruits = ['apple', 'banana', 'orange'];

// 配列内に 'banana' が存在するかを検索
if (in_array('banana', $fruits)) {
    echo "バナナはあります!";
} else {
    echo "バナナはありません。";
}
?>

この例では ‘banana’ という値が $fruits 配列の中にあるかを調べています。
in_array は true または false を返すため、 if 文 と組み合わせることで、検索結果に応じた処理を行うことができます。

上記のソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

PHP のソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

▲目次へ戻る

3. in_array 関数の注意点(数値と文字列の区別について)

「in_array 関数は、検索時にデータの型(数値か文字列かなど)を区別しません。
例えば、数値 101 が格納されている配列に対して 文字列の ‘101’ を検索するように記述すると、「検索対象は存在する」という結果になります。

<?php
// 数値の配列を定義
$numbers = [100, 101, 102];

// 文字列 '101' を検索
if (in_array('101', $numbers)) {
    echo "'101'はあります!";
} else {
    echo "'101'はありません。";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

これは「値の型」を無視した検索によって、’101′ が 101 と一致したと判断されたためです。もし、数値や文字を厳密に区別したい場合、 in_array 関数に 第三引数を追加します。in_array 関数の 第三引数には、true/false のどちらかを指定することができます。

in_array(検索する値, 検索対象の配列, true/false);
true : 型の違いを厳密に区別する
false : 型の違いを無視する

なお、第三引数を省略した場合は、型の違いを無視する false が指定されたものとして扱われます。なので、先程は 文字列 ‘101’ で 数値の 101 の検索が行われたのです。

先程のコードの in_array 関数 に true を指定した処理に変更して、もう一度実行してみましょう。変更したコードは型の違いを厳密に区別するため、’101’はありません。 と出力されます。

<?php
// 数値の配列を定義
$numbers = [100, 101, 102];

// 厳密チェックあり(型も一致する必要あり)
if (in_array('101', $numbers, true)) {
    echo "'101'はあります!";
} else {
    echo "'101'はありません。";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

数値や文字列の区別をつけた検索を行いたい場合は、第三引数に true を指定すると良いでしょう。第三引数の指定によって検索時の型の扱いが変わるため、その違いを以下にまとめます。

第三引数の値 型の違いを区別するか 説明
省略 区別しない デフォルトの設定。値が一致すれば見つけたと見なす
false 区別しない 値が一致すれば見つけたと見なす
true 区別する 値と型の両方が一致すれば、見つけたと見なす

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

▲目次へ戻る

4. in_array 関数について、よくある質問

in_array 関数の使い方について、よくある質問をまとめました。

複数の値を一度に検索する方法はありますか?

多次元配列に対して in_array 関数は使えますか?

連想配列を対象に in_array 関数は 使えますか?


4-1. 複数の値を一度に検索する方法はありますか?

複数の値を一度に検索する方法はありますか?

in_array 関数は一度に1つの値しか検索することができません。ただし、foreach と組み合わせて使用することで、複数の値を検索できます。

以下のコードでは検索したい値を、$searchItems という配列にまとめています。この配列を foreach で繰り返すことで、値を1つずつ取り出して in_array 関数で検索できます。

<?php
// 検索対象の配列を定義
$fruits = ["apple", "banana", "cherry"];
// 検索語の配列を定義
$searchItems = ["banana", "grape"];

// 検索後の配列から 一つずつ取り出して繰り返す
foreach ($searchItems as $item) {
    // 取り出した値で 検索対象を検索
    if (in_array($item, $fruits)) {
        echo "'$item' は配列に存在します!";
    } else {
        echo "'$item' は配列に存在しません。";
    }
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

▲目次へ戻る

4-2. 多次元配列に対して in_array 関数は使えますか?

多次元配列に対して in_array 関数は使えますか?
in_array 関数は 一次元配列に対して有効な関数であり、多次元配列には使えません。[1,2,3], [4,5,6], [7,8,9] の値が格納された多次元配列を例にしてみます。
<?php
// 多次元配列を定義
$data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

// 多次元配列に対して in_array 関数を実行
if (in_array(5, $data)) {
    echo "5 が見つかりました!";
} else {
    echo "5 は見つかりませんでした。";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

実行結果は「5 は見つかりませんでした。」となります。
数値の 5 を検索しようとしていますが、$data に格納されているのは [1,2,3], [4,5,6], [7,8,9] の配列であるため、一致しません。

このような場合は foreach を使って内側の配列を1つずつ取り出し、それぞれに対して in_array を使うことで検索が可能になります。

<?php
// 多次元配列を定義
$data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

// 検索結果を格納する変数 (初期値: false)
$found = false;

// 多次元配列から 配列をひとつずつ取り出して繰り返す
foreach ($data as $subArray) {
    // 取り出した配列に対して in_array 関数を実行
    if (in_array(5, $subArray)) {
        $found = true;  // 見つかった場合は true を設定
        break;          // 処理を終了
    }
}

// 検索結果を判定して出力
if ($found) {
    echo "5 が見つかりました!";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

主な変更点として、まず検索結果を判定するための変数 $found を用意します。
今は「目的の値が見つかっていない状態」なので、 false を入れておきます。

$found = false;

次に、$data の中の配列(この場合、二次元配列の各行)を1つずつ取り出して調べるために、foreach を使います。

foreach ($data as $subArray) {

この $subArray には、[1, 2, 3] や [4, 5, 6] のような「内側の配列」が順番に入ります。

その中で、in_array(5, $subArray) を使って、「5 がその中にあるか?」を、「内側の配列」ごとに調べます。

if (in_array(5, $subArray)) {

もし 5 が見つかったら、$found に true に変更して、break でループを終了します。
(もうこれ以上探す必要がないからです)

$found = true;
break;

最後に、ループが終わったあとで $found を確認し、true であれば「見つかりました!」と表示します。

if ($found) {
    echo "5 が見つかりました!";
}

このようにすれば、in_array 関数を 多次元配列に対して使うことができます。

▲目次へ戻る

4-3. 連想配列を対象に in_array 関数は 使えますか?

連想配列を対象に in_array 関数は 使えますか?
in_array 関数は 連想配列でも使うことができます。ただし、検索できるのは 連想配列の値が対象となり、キーは検索対象になりません。
どういうことなのか、具体的にコードで見てみましょう。
<?php
// 連想配列を定義
$person = [
    'name' => 'Yamada',
    'age' => 25,
    'city' => 'Tokyo'
];

// 値である 'Tokyo' で検索
if (in_array('Tokyo', $person)) {
    echo "'Tokyo' という値は 存在します。";
} else {
    echo "'Tokyo' という値は 存在しません。";
}

// キーである 'city' で検索
if (in_array('city', $person)) {
    echo "'city' というキーは 存在します。";
} else {
    echo "'city' というキーは 存在しません。";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

‘Tokyo’ は見つけることができましたが、書かれているはずの ‘city’ を検索しても見つかりませんでした。これは、in_array 関数が連想配列の「値」のみを検索対象とし、「キー」は対象外であるためです。

もし、連想配列のキーの値で検索を行いたい場合、in_array関数 ではなく array_key_exists 関数 を使いましょう。

<?php
// 連想配列を定義
$person = [
    'name' => 'Taro',
    'age' => 25,
    'city' => 'Tokyo'
];

// array_key_exists 関数を使って連想配列のキーの値を検索
if (array_key_exists('age', $person)) {
    echo "'age' というキーは存在します。";
} else {
    echo "'age' というキーは 存在しません。";
}
?>

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

これで、連想配列のキーの値の検索を行うことができました。

PHP【配列】in_array 関数で配列内に値が存在するかを調べる!【初心者向け】【プログラマカレッジ】

▲目次へ戻る

5. まとめ

PHP での配列の存在チェックについて、いかがでしたでしょうか。

「Webプログラマーになりたいけど、独力では限界があるかも…」そう感じている方には「プログラマカレッジ」がおすすめです!
プログラマカレッジは、本気でプログラマを目指す方のための受講料無料のプログラミングスクールです。今回ご紹介したPHPを含む豊富なカリキュラムで、IT初心者からWebプログラマーとして就職するまで、プロが完全にサポートします。

本気でプログラマとして就職・転職したいという方は、一度のぞいてみて下さい。
→ 就職支援付き無料プログラミングスクール「プログラマカレッジ」

▲目次へ戻る

無料説明会

SHARE

最新記事

無料説明会に参加してみる

INTERNOUS,inc. All rights reserved.

無料オンライン説明会へ