こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!