【PHP】多次元の連想配列から特定のデータを検索する方法

  • 2020年3月11日
  • PHP

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

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG