久しぶりに PHP を触ったときに配列の検索で若干詰まりかけたのでまとめ。
今回は array_search
関数を使った多次元連想配列の検索方法です。
参考にさせていただいた記事はこちらから。
PHPで多重連想配列からデータを検索、array_searchをシンプルにまとめました – Qiita
https://qiita.com/rorensu2236/items/c3538629a9d9fed4daaa
array_search
の使い方について、PHP Manual のページに載っていたサンプルコードはこちら。
1 2 | $data = array (0 => 'blue' , 1 => 'red' , 2 => 'green' , 3 => 'yellow' ); $key = array_search ( 'green' , $array ); |
こちらを実行すると、$key
には 2
という値が代入されます。
シンプルな連想配列の検索についてはこれで問題ありません。
しかし、今回私が扱ったデータは、下記のようにもう少し詳細なデータを含んだ多次元配列だったので、単純にこちらの配列を実行するだけでは駄目でした。
1 2 3 4 5 6 | $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
関数の使い方はこちら。
データは上の配列を使っています。
1 | $colors = array_column( $data , 'color' ); |
たったこれだけ!
作成された配列は下記のようになります。
1 2 3 4 5 6 | ( [0] => blue [1] => red [2] => green [3] => yellow ) |
あとは、こちらの結果に対して array_search
関数を実行すれば OK です。
コードを最初から書くと、下記のようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 検索対象のデータ $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 で多次元配列から特定の値を検索する方法でした。
ご参考になれば幸いです。