一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。しかし、絞込検索に対応するのは案外大変だったりします。
絞込み検索(and検索)一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。しかし、絞込検索に対応するのは案外大変だったりします。1行ずつキーワードの数だけ繰り返し調べる。手順を考えてみましょう。まず入力されたキーワードを分解しなければいけません。ユーザーは他の検索エンジンの習慣から2つ以上のキーワードで絞り込むとき「スペース」でキーワードを区切るのが自然でしょう。そこで入力された文字列を「スペース」を区切り文字として分解します。分解したキーワードは配列に収めておきます。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。
僕が使っているサーバーとドメイン管理のレジストラーです。
§絞込み検索(and検索)
一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。
しかし、絞込検索に対応するのは案外大変だったりします。
1行ずつキーワードの数だけ繰り返し調べる
絞込み検索(and検索)
一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。
しかし、絞込検索に対応するのは案外大変だったりします。
1行ずつキーワードの数だけ繰り返し調べる。
手順を考えてみましょう。
まず入力されたキーワードを分解しなければいけません。
ユーザーは他の検索エンジンの習慣から2つ以上のキーワードで絞り込むとき「スペース」でキーワードを区切るのが自然でしょう。
そこで入力された文字列を「スペース」を区切り文字として分解します。
分解したキーワードは配列に収めておきます。
$KeyWord=htmlspecialchars($KeyWord);
$KeyWord=mb_convert_encoding($KeyWord‚ "EUC-JP"‚ "auto");
$KeyWord=mb_convert_kana($keyWord‚ s); //解説(1)
$ArrKeyword=explode(" "‚ $KeyWord); //解説(2)
解説(1)
区切りに使われるスペースが「半角」なのか「全角」なのかはケースバイケースです。
どちらでも対応できるように「全角スペース」が入力された場合、すべて半角スペースに変換して統一します。
mb_convert_kana関数は全角文字を半角に変換する関数です。
「s」は変換オプションで全角スペースを半角スペースに変換します。
mb_convert_kana(対象文字列‚ 変換オプション)
解説(2)
キーワードを半角スペース区切りの配列にします。
次にデータを1行ずつ読み込みながらすべてのキーワードと一致するか調べます。
$Data=file("item.csv");
for($i=0;$i$<sizeof($Data);$i++){
$lines=strip_tags($Data[$i]);
$Match=true; //解説(3)
for($n=0;$n<sizeof($ArrKeyword);$n++){ //解説(4)
if(!eregi($ArrKeyword[$n]‚ $lines)) //解説(5)
$Match=false;
break;
}
if($Match){ //解説(6)
array_push($Result‚ $Data[$i]);
}
}
解説(3)(6)
判定の基準となるフラグ($Match)を作ります。
$Matchが検索処理後もtrueであればデータを配列($Result)に移し変えます。
解説(4)
キーワードを収めた配列($ArrKeyword)の要素の数だけ1行を繰り返し調べます。
ここで一つ注意です。
繰り返しのfor文がネスト(入れ子)なので、$iではなく$nになっています。
どの変数がどこで使われているのかキチンと把握しておいてください。
解説(5)
もし一つでも一致しないキーワードがあれば$Matchはfalseとなり、次の行の検索が始まります。
「すべてのキーワードが一致すれば」ではなく「一致しないキーワードがなければ」というところがミソですね。
あとは移し変えられたデータの配列($Result)を使って検索結果を表示するだけです。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。