久しぶりに 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 で多次元配列から特定の値を検索する方法でした。
ご参考になれば幸いです。