PHP掲示板その15

くもり今日はおやすみ。 8時過ぎに起きてダラダラ過ごす。
PHP掲示板でもやるかな~

今日やることは検索機能をつける。
マルチバイト正規関数というのを使って一致するかどうか調べる。
で、ログ内から見つかったものをリストアップする。 さらに、表示するときに一致した文字の背景に色をつける。
Googleのキャッシュ検索の表示みたいな感じのやつ。
ここまではすぐ作る事が出来た……
ただ、ここからが……
検索するときに半角スペースをあけるとor検索になるようにする。 たとえば「こんにちは おはよう」と入力したら「こんにちは」「おはよう」のどちらかが入ってる文章が検索されるように。
半角スペースはホントは&検索なんだけど、それはあとで修正しよう……
入力されたものを半角スペースか全角スペースで区切って配列に代入した。
まずは背景色をつけるところから。 今の検索対象は「本文」のみ。 本文中から配列[0]に入ってるものがあるかどうかチェック、あれば<font>をつけて色を変える。 それの繰り返し。
そしてここからがすっごい悩んだ。 表示の部分。

同じように配列[0]に入ってるものが本文中にあるかチェック。 あれば出力、そして配列[1]にに入ってるものがあるかチェック。 あれば出力そして配列[2]に行く。 という繰り返しをやっていたのだけど、本文中に「こんにちは」「おはよう」の両方があると、同じ記事が2つ出力されてしまう。
表示された記事番号を新しい配列に当てはめて、それのみを出力して試してみた。
検索のorを増やせば増やすほど、重複する。 そして「8,8,7,6,5,5,5,4,3,3,3,2,1,1」のように、同じ記事が複数回出力されてしまう。
どうやって直せばいいんだ~~~
「8,8,4,6,5,5,5,4,3,3,3,2,1,1」の配列から重複したものを削除しようとした。
関数でarray_uniqueというのがあったから使ってみたけど。
重複したものを削除するのだけど、やってみたら
[0] = 8
[2] = 4
[3] = 6
[4] = 5
[7] = 3
[10] = 2
[11] = 1
というふうに、重複したところが削除された。 だけど希望としては削除されたところを前につめてほしかった……
判れば出来るのかもしれないけれど、オレはそれが思いつかなかった。
なので元の配列をforとifで1つずつ順にチェックしていって重複しないように新しい配列に代入して行った。

だけど、今度はこれをどうやって使うのかわからなかった……

そんなこんな悩んで、どうやっても進まなくなった……

どうしてもできなくなって、PHPの本を読んでいた。 すると「break;」というのを見つけた。
これをforの中に組み込めば、そこでループが終わる!
さっそくやってみた。 そしたらできた!
こんな単純なことだったとは…… 悩んだ数時間がいったい……

サンプル
ソース
検索

ちなみに検索のチェックボックスと表示件数は飾りです。 まだ動作さしない……