- ベストアンサー
配列データをキーワード検索する方法とは?
- 配列データ内の名前と性格からキーワードを検索する方法についてのアドバイスをお願いします。
- テキストフォームで入力したキーワードを使用してOR検索を実行する方法について教えてください。
- 配列データ内のOKの条件を満たす名前と性格を表示する方法についての助言をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
<form method="get"> 名前か性格の一部:<input type="text" name="keyword"><br> <input type="submit" value="検索"> </form> <? $pattern="/^.*?\t.*?\t"; if(isset($_REQUEST["keyword"])){ $k=$_REQUEST["keyword"]; $k=preg_quote($k,"/"); if(preg_match("/ /",$k)){$k="(".str_replace(" ","|",$k).")";} $pattern.=".*?(".$k.".*?\t|\t".$k.".*?)"; }else{ $pattern.=".*?\t.*?\t"; } $pattern.="ok$/"; //print $pattern."<br>"; $string=array( "1組\t男\t高木義男\t明るい性格\tok", "2組\t女\t高島幸子\t根暗な性格\tok", "3組\t男\t飯田彰浩\t前向きな性格\tno", "2組\t男\t木下敏明\t努力家\tok", "3組\t女\t結城聡子\t心配性な性格\tno", "1組\t女\t佐藤恵子\t明るい性格\tok", ); foreach($string as $val){ if(!preg_match($pattern,$val)) continue; print $val."<br>"; }
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
たとえばこんな感じでパターンをつくって正規表現でヒットさせてみては? <form method="get"> 名前:<input type="text" name="name"><br> 性格:<input type="text" name="personality"><br> <input type="submit" value="検索"> </form> <? $pattern="/^.*?\t.*?\t"; if(isset($_REQUEST["name"])){ $pattern.=".*?".preg_quote($_REQUEST["name"],"/").".*?\t"; }else{ $pattern.=".*?\t"; } if(isset($_REQUEST["personality"])){ $pattern.=".*?".preg_quote($_REQUEST["personality"],"/").".*?\t"; }else{ $pattern.=".*?\t"; } $pattern.="ok$/"; $string=array( "1組\t男\t高木義男\t明るい性格\tok", "2組\t女\t高島幸子\t根暗な性格\tok", "3組\t男\t飯田彰浩\t前向きな性格\tno", "2組\t男\t木下敏明\t努力家\tok", "3組\t女\t結城聡子\t心配性な性格\tno", "1組\t女\t佐藤恵子\t明るい性格\tok", ); foreach($string as $val){ if(!preg_match($pattern,$val)) continue; print $val."<br>"; } ?>
お礼
yambejpさんへ おはよう御座います。早速の貴重なアドバイスを有難う御座います! 折角ソースまでご提供していただき、貴重なお時間を割いていただいたのも関らず、とても恐縮なのですが、出来れば1つのフォームから検索したいと思っております。すみません。。 preg_quote();などはじめてみるものもあったりで、とてもスマートに記述できるものなんだぁと、非常に勉強になり、またアドバイスいただいたソースをもとに、ヒントに繋がらないか?と考えてはいるのですが、知識不足なため思うようにヒントに繋がるものが見えずにおります。 ホント、ソースまでご提供していただき恐縮なのですが、1つのフォームからnameと、personalityを両方検索出来るようにしたいと考えていますので、恐れ入りますが、引き続きご指導頂戴できたら幸いです。宜しくお願い致します。
補足
yambejpさんへ こんばんは。早速のお返事をありがとう御座います! 例として掲載した配列の形式が、実際のもの違っていたので(これはもちろん私のせいです!)、実際に取り込んでいる配列の形式にあわせるため、初心者の私にとって馴染みのない正規表現の扱いに、試行錯誤いたしましたが、望んでいる結果を得ることが出来ました。 何か何まで恐縮しながらも、ありがたい気持ちで感謝しております。 ありがとう御座いました!