久しぶりに PHP を触ったときに配列の検索で若干詰まりかけたのでまとめ。
今回は array_search 関数を使った多次元連想配列の検索方法です。
参考にさせていただいた記事はこちらから。
PHPで多重連想配列からデータを検索、array_searchをシンプルにまとめました – Qiita
https://qiita.com/rorensu2236/items/c3538629a9d9fed4daaa
array_search の使い方について、PHP Manual のページに載っていたサンプルコードはこちら。
$data = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'yellow');
$key = array_search('green', $array);
こちらを実行すると、$key には 2 という値が代入されます。
シンプルな連想配列の検索についてはこれで問題ありません。
しかし、今回私が扱ったデータは、下記のようにもう少し詳細なデータを含んだ多次元配列だったので、単純にこちらの配列を実行するだけでは駄目でした。
$data = array(
array('id' => 0, 'color' => 'blue'),
array('id' => 1, 'color' => 'red'),
array('id' => 2, 'color' => 'green'),
array('id' => 3, 'color' => 'yellow')
);
ですので、まずは key 名が color の値だけを抜き出して、新しく配列を作成する必要があります。
方法としては、foreach で配列を回してももちろん良いのですが、array_column 関数を使うと一発なので、こちらがおすすめです。
array_column 関数の使い方はこちら。
データは上の配列を使っています。
$colors = array_column($data, 'color');
たったこれだけ!
作成された配列は下記のようになります。
(
[0] => blue
[1] => red
[2] => green
[3] => yellow
)
あとは、こちらの結果に対して array_search 関数を実行すれば OK です。
コードを最初から書くと、下記のようになりました。
// 検索対象のデータ
$data = array(
array('id' => 0, 'color' => 'blue'),
array('id' => 1, 'color' => 'red'),
array('id' => 2, 'color' => 'green'),
array('id' => 3, 'color' => 'yellow')
);
// array_column 関数で color のみを抜き出して新規配列作成
$colors = array_column($data, 'color');
// array_search で検索(検索する値は 'green')
$index = array_search('green', $colors);
以上です。
得られる結果は 2 でした。
実際にコードとして書いてしまえばとてもシンプルですね。
以上、PHP で多次元配列から特定の値を検索する方法でした。
ご参考になれば幸いです。