PHPで配列の要素を検索する方法
学べること
- preg_grepの使い方
- 変数を検索する場合の正規表現
preg_grep
検索してマッチする配列の要素を返します。
- 使い方
$array = ['hoge','huga'];
$result = preg_grep('/ho/',$array);
var_dump($result);
//出力結果
// array(1) {
// [0] =>
// string(4) "hoge"
// }
- 解説
preg_grepの第一引数には検索する文字列、第二引数には配列を入れます。
ここでは配列の要素で"ho"が含まれるものを検索しています。$resultには検索にマッチした要素が配列として入っています。
ちなみに、第一引数の検索する文字列を囲ってるスラッシュはデリミタ(区切り文字)と呼ばれ、スラッシュじゃなくてもかまいません。例えば'{ho}'
でもOK.
検索文字列が変数の時
それでは、検索する文字列が変数だった場合はどうしましょう。
上記に従うと、以下のパターン1のようになるはずです。
$array = ['hoge','huga'];
$search = 'ho';
//パターン1
$result = preg_grep('/$search/',$array);
しかし、これでは$searchそのものが検索ワードとして扱われてしまうのでダメ。
ちなみにpreg_grep($search,$array);
もだめ。これはデリミタがないですね。
ではどうするかというと、以下のように書きます。
//パターン2
$result = preg_grep('/'.$result.'/',$array);
//パターン3
$result = preg_grep("/$result/",$array);
上記のパターンだとそれぞれ変数展開されます。
クォーテーションの違いは下記記事が参考になるかと!
PHPのダブルクォーテーションとシングルクォーテーションの違いを理解する
もちろん
preg_grep('{'.$result.'}',$array);
とか、
preg_grep("/{$result}/",$array);
でもOK。
こちらもご参考に。
文字列の中の変数展開についてまとめました
今回は部分一致で検索する場合を紹介しましたが、完全一致で検索する場合はin_array()
を使いましょう!
でわでわ。