PHP研究

17.検索処理

検索の処理が悩みました。
インターネットをあっちこっち探したんですが、いい見本がない。
データベースでの検索処理はいっぱいあるんですけどね。

そこでこんな関数を使ってみました。

strpos()

注意としては、検索は検索でも適合する位置を探すものなので、

$hit = strpos ($lines, $word);
if (!($hit === false)) {
 // 処理
}

としてみました。
$linesは検索対象の文字列、$wordは探す文字列です。
$hitには見つかった文字の位置が入ります。
見つからなければ、falseとなります。
そこでif文でfalseでなければ.......として処理をさせています。

初心者なので、検索にstrpos()を使うのがベターかどうか判断つきません。
もっといい方法があったら教えてください。


検索語が複数でも対応できるようにするには、
まず語句を配列に入れます。

$word = mb_convert_kana($word, "s","SJIS"); //全角スペースを半角に
$word = str_replace( '\t', ' ', $word ); //念のためタブを変換
$pairs = preg_split("/ /", $word); //配列に代入

そしてデータを読み込み、

$list = file("data.log");

ループで検索にかけます。

foreach ($list as $lines){
$flag = 0;
foreach ($pairs as $pair){
if ($flag == 1) { continue; }
$hit = strpos ($lines, $pair);
if (!($hit === false)) {
$new[] = $lines;
$flag = 1;
}
}
}

これで、$newに検索に引っかかった行が配列で入っているので、
あとは煮るなり焼くなり............
上の例は、 OR検索ですね。

検索にヒットした数を数えるなら、

$count = count($new);

とすれば$newの要素数が入ります。