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の要素数が入ります。