【PHP】配列の検索

PHPで配列内の値を検索して、該当レコードを抽出する方法について説明します。

array_column関数array_keys関数を使って実現します。

array_column関数

array_column — 入力配列から単一のカラムの値を返す

array_column(
array $array,
int|string|null $column_key,
int|string|null $index_key = null
): array

パラメータ
array:値を取り出したい配列
column_key:値を返したいカラム(カラム番号を整数値で指定、もしくは連想配列のキーも指定できる)
index_key:返す配列のインデックスキーとして使うカラムを指定

array_keys関数

array_keys — 配列のキーすべて、あるいはその一部を返す

array_keys(
array $array,
mixed $filter_value,
bool $strict = false
): array

パラメータ
array:返すキーを含む配列
filter_value:指定した場合は、この値を含むキーのみを返す
strict:検索時に厳密な比較 (===) を行うかどうか
※strictですが、型まで比較する必要がある場合はtrueにすることをお勧めします。

使用例

では本題に入っていきます。

都道府県の名称・人口・地方名が入っている配列から、関東地方のレコードだけを抽出します。

// 配列を準備します。
$arr = [
	['id'=> 1, 'name'=>'東京都', 'population' => 14099993, 'region' => '関東'],
	['id'=> 2, 'name'=>'愛知県', 'population' => 7480897,  'region' => '中部'],
	['id'=> 3, 'name'=>'大阪府', 'population' => 8774574,  'region' => '近畿'],
	['id'=> 4, 'name'=>'埼玉県', 'population' => 7331296,  'region' => '関東'],
	['id'=> 5, 'name'=>'神奈川', 'population' => 9229713,  'region' => '関東']
];

// ①array_columnを使って地方列だけを抜き出します。
$search_column_region = array_column($arr, 'region');

// ②array_keyを使って①で抜き出した列から関東という名称が含まれているインデックスの配列を取得します。
$region_index = array_keys($search_column_region, '関東', true);

// ②には$arr配列の中で関東地方の行のインデックスが入っています。インデックスからレコードを抜き出して別の配列に入れます。
$kanto = [];
foreach($region_index as $index) {
	$kanto[] = $arr[$index];
}

①のarray_column関数で抜き出した$search_columnは以下の通りです。

Array ( [0] => 関東 [1] => 中部 [2] => 近畿 [3] => 関東 [4] => 関東 )

②のarray_key関数で取得した関東地方レコードのインデックスは以下の通りです。

Array ( [0] => 0 [1] => 3 [2] => 4 )

$kantoという配列は以下の通りです。

Array ( 
     [0] => Array ( [id] => 1 [name] => 東京都 [population] => 14099993 [region] => 関東 ) 
     [1] => Array ( [id] => 4 [name] => 埼玉県 [population] => 7331296 [region] => 関東 ) 
     [2] => Array ( [id] => 5 [name] => 神奈川 [population] => 9229713 [region] => 関東 ) 
)

関東地方のレコードだけ抽出することが出来ました。

Share this content: