8
5

More than 3 years have passed since last update.

PHPで配列の要素を部分一致で検索する方法 ( preg_grep )

Last updated at Posted at 2021-07-20

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()を使いましょう!

でわでわ。

8
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5