【夏休み企画】検索システムつくってみようぜ!④
投稿者: | カテゴリ PHP, Tips | 2009 年 8 月 21 日
今年は冷夏だそうですが皆様いかがお過ごしでしょうか。
韓国の友人に荷物を送ったら韓国の税関で検疫をうけたと連絡を受けたかしこです。
【4、条件による検索結果数の表示】
・検索条件に何件ヒットとしたか。
というルーチンの概要説明となります。
指定した条件に対してdata.phpの中身を精査して何件該当するのか。ここをクリアすれば検索は余裕です。
実際の完成形はこちら⇒「キテ荘的検索ってみよ」
スターターキットはこちら。
では、ルーチンを考えてみます。
Getで受信した変数とdata.phpに連想配列として格納されている商品データをif文で選別する。
?なのことだ・・・とお思いのアナタ。
このシリーズの一回目にやった”print_r($list);”でデータを確認してみてください。
[cat]=>”1″ とかという表記があったはず。それとGetで受信した変数($cat)を付きあわせて該当するファイルをカウントする。
それを条件の数だけチェックしていけば残った配列数が該当件数、しいては該当ファイルということになります。
あとはそのルーチンをプログラムしてやればOK!
ということで下をご覧ください。
=========================================
<?
include ‘data.php’;
if($_GET["cat"]){
$cat = $_GET["cat"];
}else{
$cat = “” ;
}
if($_GET["catd"]){
$catd = $_GET["catd"];
}else{
$catd = “” ;
}
if($_GET["new"]){
$new = $_GET["new"];
}else{
$new = “” ;
}
$snum = $cat.”-”.$catd.”-”.$new;
?>
<?
$num = count($list);
$searchnum = 0;
if($list){
for($i= 0;$i<$num;$i++){
if($cat){
$a = $list[$i]["cat"];
}
if($catd){
$b = $list[$i]["cat_detail"];
}
if($new){
$c = $list[$i]["new"];
}
$dnum = $a.”-”.$b.”-”.$c;
if($snum == $dnum){
$searchnum++;
$banban[] = $list[$i];
}
}
}
?>
<?=$searchnum?>
=========================================
前半ブロックでGetで受信した変数を付きあわせしやすくするために”$snum”という変数にまとめています。
さてさて、本日のメイン解説となる後半ブロックです。
まずdata.phpから読み込んだデータをcount関数で何件(何個の配列数が)あるかどうかを調べて$numに格納します。
これはその下のfor文を何回まわすのかという数を調べているわけです。そう、$numの数だけまわします。
$searchnumは検索該当数をカウントするために用意。forでまわる度にカウントが1つずつ増えていきます。これが「○○ヒット」の数になるわけです。
ただし、このままですと$listが全部表示されてしまいますのでfor文の中で精査していきます。
$a=$list[$i]["cat"]・・・$listの中のforのi番目の連想配列キーcat を変数$aに格納
$b = $list[$i]["cat_detail"]・・・$listの中のforのi番目の連想配列キーcat_detail を変数$bに格納
$c = $list[$i]["new"]・・・$listの中のforのi番目の連想配列キーnew を変数$cに格納
これを変数$dnumにまとめて格納・・・そう、これが所謂、精査の条件になります。
あとはGetした$snumとforの中の$dnumのイコールのときだけ$searchnumにプラス1してやります。
これで検索数がはじき出されます。
ここからは補足ですが・・・
$banban[] = $list[$i];は次回、実際のデータを吐き出す際に使用する項目です。これは該当したi番目の配列を$banbanに配列として格納してゆけよ!という命令です。
ここは次回に使うのでまた改めて解説しますが、要はヒットした配列だけを$banbanに入れるということなのです。
ということで本日はここまでです。(どんどん複雑になっていくなぁ・・・)
今日のデータはこちらからダウンロードできます。
さてさて、次回は最終回です。実際にデータを吐き出すルーチンをやりますが、ポイントは$banbanですw
【予定】
・5、条件による検索結果の表示(完成)



わーいついに4まできた〜。
非常に難しい(と思われる)、そしてよく使うだろう内容を
噛み砕いて解説たっぷりでホント助かります。
が、やはり手を動かさないと、やっぱり覚えられないので
ぜひぜひ近いうちにためしてみよ〜。
次で堂々の完結編!
期待してまっせ〜w