PHPで配列の中から特定の値があるか存在を確認する・検索する方法(in_array, array_search)

PHP-Search

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPで配列の中から特定の値があるかを存在を確認する・検索する方法(in_array, array_search)について解説していきます。

PHPで配列の中から特定の値があるかを確認する・検索する方法

PHPで配列の中から特定の値があるか存在を確認する・検索する方法として、今回紹介するのは、in_array()array_search()です。

in_arrayで特定の値があるか存在を確認する

in_array() は、配列に値があるかチェックする関数で、戻り値は true / false です。

PHP-Manual記載の構文は、次のとおりです。

in_array(mixed $needle, array $haystack, bool $strict = false): bool

それぞれのパラメーターの意味は、次のようになります。

in_array(検索する値, 検索対象の配列, 型の比較をするかの真偽値)

実行結果として、シンプルに真偽値を返してくれるので、指定した値が配列内の存在するかを確認したい時に使います。

<?php

$data_set = [
    (object)['group' => '日本', 'city' => '東京'],
    (object)['group' => '日本', 'city' => '大阪'],
    (object)['group' => 'ドイツ', 'city' => 'ベルリン'],
    (object)['group' => 'ドイツ', 'city' => 'ミュンヘン'],
    (object)['group' => 'アメリカ', 'city' => 'ニューヨーク'],
    (object)['group' => 'アメリカ', 'city' => 'ロサンゼルス'],
];

$group_array = [];

$city_info = [];

foreach ($data_set as $data) {

    $group_name = $data->group;
    
    // group_arrayにグループ名が登録されていなければ、グループ名を登録する
    if (!in_array($group_name, $group_array, true)) array_push($group_array, $group_name);

}

var_export($group_array);
//  array (
//     0 => '日本',
//     1 => 'ドイツ',
//     2 => 'アメリカ',
//   )

array_searchで特定の値を取得できるように検索する(keyを取得する)

array_search() は、指定した値を配列で検索し、見つかった場合に対応する最初のkeyを返す関数です。

PHP-Manual記載の構文は、次のとおりです。

in_array(mixed $needle, array $haystack, bool $strict = false): bool

それぞれのパラメーターの意味は、次のようになります。

array_search(検索する値, 検索対象の配列, 型の比較をするかの真偽値)

実行結果として、発見したらkeyを返してくれるので、指定した値のkeyを取得したい時に使います。

<?php

$data_set = [
    (object)['group' => '日本', 'city' => '東京'],
    (object)['group' => '日本', 'city' => '大阪'],
    (object)['group' => 'ドイツ', 'city' => 'ベルリン'],
    (object)['group' => 'ドイツ', 'city' => 'ミュンヘン'],
    (object)['group' => 'アメリカ', 'city' => 'ニューヨーク'],
    (object)['group' => 'アメリカ', 'city' => 'ロサンゼルス'],
];

$group_array = [];

$city_info = [];

foreach ($data_set as $data) {

    $group_name = $data->group;
    
    // group_arrayにグループ名が登録されていなければ、グループ名を登録する
    if (!in_array($group_name, $group_array, true)) array_push($group_array, $group_name);
    
    // グループ名リストから、key(index)を取得する
    $group_key = array_search($group_name, $group_array, true);

    $city_obj = (object)[];

    $city_obj->city = $data->city;
    $city_obj->group_key = $group_key;
    array_push($city_info, $city_obj);
}

var_export($group_array);
//  array (
//     0 => '日本',
//     1 => 'ドイツ',
//     2 => 'アメリカ',
//   )

var_export($city_info);
//   array (
//     0 => 
//     (object) array(
//        'city' => '東京',
//        'group_key' => 0,
//     ),
//     1 => 
//     (object) array(
//        'city' => '大阪',
//        'group_key' => 0,
//     ),
//     2 => 
//     (object) array(
//        'city' => 'ベルリン',
//        'group_key' => 1,
//     ),
//     3 => 
//     (object) array(
//        'city' => 'ミュンヘン',
//        'group_key' => 1,
//     ),
//     4 => 
//     (object) array(
//        'city' => 'ニューヨーク',
//        'group_key' => 2,
//     ),
//     5 => 
//     (object) array(
//        'city' => 'ロサンゼルス',
//        'group_key' => 2,
//     ),
//   )

array_column と array_search を組み合わせて、多次元配列のデータを検索する

array_column()array_search()を組み合わせることで、多次元配列のデータを検索して、その配列だけを取得することができます。

<?php

$records = [
    [
        'id' => 1,
        'type' => 'ロボ玉試作1号機',
        'from' => '神聖グンマー帝国',
        'cost' => 2000
    ],
    [
        'id' => 2,
        'type' => 'ロボ玉試作2号機',
        'from' => 'さいたまー共和国',
        'cost' => 3000
    ],
    [
        'id' => 3,
        'type' => 'ロボ玉試作3号機',
        'from' => 'Tokyo',
        'cost' => 5000
    ],

];

$key = array_search('ロボ玉試作1号機', array_column($records, 'type'), true);

var_export($records[$key]);
// [ 出力結果 ]
// array (
//     'id' => 1,
//     'type' => 'ロボ玉試作1号機',
//     'from' => '神聖グンマー帝国',
//     'cost' => 2000,
// )

array_column()の詳しい使い方は、こちらで確認できます!

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

参考・引用

  1. PHP-Manual: in_array
  2. PHP-Manual: array_search

最近の投稿