こんばんは。お世話になっております。タイトルにあるように配列内にあるデータを、キーワード検索をしたいと考えておりますが、テキストフォームに入力したキーワードが反映できずにいるため、アドバイスを頂戴したく投函させていただきました。
$string=array(
"1組 男 高木義男 明るい性格 ok",
"2組 女 高島幸子 根暗な性格 ok",
"3組 男 飯田彰浩 前向きな性格 no",
"2組 男 木下敏明 努力家 ok",
"3組 女 結城聡子 心配性な性格 no",
"1組 女 佐藤恵子 明るい性格 ok",
);
以上のような配列があり(各データのスペースはタブ区切りです)、テキストフォームで入力したキーワードを
最後のokとなっているのを条件に、名前の欄と性格の欄から、OR検索(*)をしたいのですが、上手く検索させることが出来ません。
*テキストフォームにてスペースでキーワードを入力したとき、OR検索としたい。
お忙しい中恐縮ですが、ご指導いただけたら幸いです。宜しくお願い致します。
以下が実際に記述している現在のソースです。
(テキストフォームにて入力されたキーワードをGETで送信しています)
$key = urldecode($_GET["key"]);
$key = mb_convert_encoding($key, 'EUC-JP', 'auto');
$key = mb_ereg_replace(" ", " ", $key);
$arr = explode(" ",$key);
foreach($arr as $keyy){
$wherearr[] = "(strstr($site_data_array[2], $keyy) OR strstr($site_data_array[3], $keyy))" ;
}
$wherestr = "(".implode(" OR ",$wherearr).")";
if($key != ""){
for($i=0; $i<$count; $i++){
$site_data = $string[$i];
$site_data_array = explode("", $site_data);
if($wherestr AND trim($site_data_array[4]) == "ok"){
$search_array[] = implode("\t", $site_data_array);//この配列データを表示
}
}
}
No.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>";
}
この回答への補足
yambejpさんへ
こんばんは。早速のお返事をありがとう御座います!
例として掲載した配列の形式が、実際のもの違っていたので(これはもちろん私のせいです!)、実際に取り込んでいる配列の形式にあわせるため、初心者の私にとって馴染みのない正規表現の扱いに、試行錯誤いたしましたが、望んでいる結果を得ることが出来ました。
何か何まで恐縮しながらも、ありがたい気持ちで感謝しております。
ありがとう御座いました!
No.1
- 回答日時:
たとえばこんな感じでパターンをつくって正規表現でヒットさせてみては?
<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を両方検索出来るようにしたいと考えていますので、恐れ入りますが、引き続きご指導頂戴できたら幸いです。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
phpでcookieがうまく保存されない
-
PHPで画像の渡しが上手く行きま...
-
PHPでこのコード自体に意味は無...
-
Q&Aサイトを作成していてURLの...
-
クエリObjectをforeachで回す時...
-
phpでPEAR::DBを使っているので...
-
reuterの記事をbeautiful.soup....
-
phpでクラスのメソッドで同名の...
-
PHP8を使うと、大量のWarningが...
-
SFTPなどは使わないホームペー...
-
awsにApacheとPHPを入れて、何...
-
phpのクラスメソッドの定義が長...
-
PHPで訪問回数を表示するカウン...
-
PHPを使って、別サイトの一部を...
-
jpgraphで表示されない
-
PHP MySQLに画像を直接保存
-
PHPとHTML+Xamppの掲示板で画像...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
重複を防ぐ記述について教えて...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
-
PHPでユーザー情報を入力して簡...
-
ワードプレスサイト PHP8.0.25...
-
php 完了画面の送信メールのコ...
-
SFTPなどは使わないホームペー...
-
PHPのセッション有効期限について
-
csvファイルについて教えて下さ...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで訪問回数を表示するカウン...
-
ファイルアップロードに関して...
-
掲示板を作成しておりアップロ...
-
Q&Aサイトを作成していてURLの...
おすすめ情報