PHPでスペースで区切った検索をできるようにする

今回は、PHPでスペースで区切った検索をできるようにする実装について書いていきます。

実装する機能は
1. preg_replaceで全角スペースを半角スペースに変換する
2. explodeで半角スペースごとに分割して配列にする
3. array_filterで空白の配列を削除
4. array_valuesで配列番号を整える
です。

では今回使うイカれた関数を紹介するぜ!
1. preg_replace
第一引数で正規表現パターンを、第二引数で置換後の文字列を、第三引数で置換対象の文字列を指定します。
今回はスペースが全角だった場合に半角に置換するために使います。

例
$str = "ガングニール 天羽々斬 イチイバル アガートラーム";
$replace = preg_replace("/( | )/", " ", $str);
//$replaceの中身
"ガングニール 天羽々斬 イチイバル アガートラーム"

2.explode
第一引数で区切り文字を、第二引数で対象の文字列を指定します。
1.で置換した文字列を配列にしてforeachで回せるように加工します。

例
$str = "ガングニール 天羽々斬 イチイバル アガートラーム";
$explode = explode(" ", $str);
//$explodeの中身
array [
0 => "ガングニール"
1 => "天羽々斬"
2 => "イチイバル"
3 => "アガートラーム"
]

通常であれば1と2で事足ります。
しかし、通常の範囲外の入力がされるかもしれません。
動作の不具合の原因になるかもしれないので、想定される通常の範囲外の入力にも対応できるような実装をしていきます。

3. array_filter
指定した引数の空白が入ったvalueを削除します。
トチ狂ったかのように文字と文字の間にスペースを入れられることを想定して、空白が入ったvalueがないようにするために使用します。

例
$str = "ガングニール      天羽々斬   イチイバル       アガートラーム";
$explode = explode(" ", $str);
$filter = array_filter($explode);
//$explodeの中身
array:17 [
  0 => "ガングニール"
  1 => ""
  2 => ""
  3 => ""
  4 => ""
  5 => ""
  6 => "天羽々斬"
  7 => ""
  8 => ""
  9 => "イチイバル"
  10 => ""
  11 => ""
  12 => ""
  13 => ""
  14 => ""
  15 => ""
  16 => "アガートラーム"
]
//$filterの中身
array:4 [
  0 => "ガングニール"
  6 => "天羽々斬"
  9 => "イチイバル"
  16 => "アガートラーム"
]

空白が入ったvalueのkeyは消えましたが、配列番号が飛び飛びになってしまいます。
そこでarray_valuesの出番です。

4. array_values
配列番号を整えます。

例
$str = array_values($filter);
//$strの中身
array:4 [
  0 => "ガングニール"
  1 => "天羽々斬"
  2 => "イチイバル"
  3 => "アガートラーム"
]

以上だ!

今回紹介した関数を使えばforeachで回せるいい感じの配列になるはずです。
後はSQLをいい感じに構築して、必要な箇所に変数をぶち込んでください。