HOME > 簡易データベースを作ってみよう > 

§絞込み検索(and検索)

一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。
しかし、絞込検索に対応するのは案外大変だったりします。

1行ずつキーワードの数だけ繰り返し調べる

絞込み検索(and検索)

一つのキーワードを入力して予想以上の検索結果がヒットした場合、キーワードを追加して絞込みを試みるのはユーザーの自然な行動です。
しかし、絞込検索に対応するのは案外大変だったりします。

1行ずつキーワードの数だけ繰り返し調べる。

手順を考えてみましょう。
まず入力されたキーワードを分解しなければいけません。
ユーザーは他の検索エンジンの習慣から2つ以上のキーワードで絞り込むとき「スペース」でキーワードを区切るのが自然でしょう。
そこで入力された文字列を「スペース」を区切り文字として分解します。
分解したキーワードは配列に収めておきます。

$KeyWord=$_GET["key"];
$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行ずつ読み込みながらすべてのキーワードと一致するか調べます。
$Result=array();
$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)を使って検索結果を表示するだけです。

プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。

簡易データベースを作ってみよう

  1. 仕組みとファイル構成
  2. CSVとは
  3. トップページを作る
  4. カテゴリー別ページを作る
  5. アイテム別ページを作る
  6. フリーワード検索を作る
  7. 検索結果がゼロの場合の処理
  8. 絞込み検索(and検索)
  9. 1ページを10件表示に制限する
  10. 登録画面を作る。
  11. CSVへの書き込み
  12. データを編集する。
  13. データを削除する。

メイン・メニュー

  1. はじめに
  2. 入門者向け参考書
  3. PHPの基本
  4. ローテーション・バナーを作ってみよう
  5. 検索結果リンクを自動化しよう
  6. 簡易データベースを作ってみよう
  7. ホームページ制作のためのリンク集

PHPが使えるサーバー

僕が使っているサーバーとドメイン管理のレジストラーです。

ロリポップ!
多くのアフィリエイターが支持する安くて安心の初心者向けレンタルサーバー。MySQLを使うなら↓のチカッパの方が軽いです。
チカッパ!
複数サイトの管理に便利なマルチアカウント、マルチドメイン対応。月額525円〜で500MBの大容量。
ムームードメイン
有料サーバー借りるなら独自ドメインは必須!「.com」「.net」なら年間数百円で取得可能です。ロリポ、チカッパの併用でDNS設定も超簡単!

管理人のブログ

音楽サイトでアフィリエイトblog
音楽アフィリエイトとサイト運営の効率化を考えるブログ