• ベストアンサー

配列中の検索文字全が含まれる、配列のある元データを拾いだすのは?

formからcheckboxで任意のデータを送りその全てのデータが、 任意の配列にマッチしたファイルのデータを抜き出すのは どうしたら出来るか、何かヒントでも教えていただけたら幸いです。 検索文字列 @kensaku #検索文字を&SplitParamで代入 検索元文字列 $kensakuMoto #","区切り文字で文字列を保存 for($i=0;$i<@kensaku;$i++){ if($kensakuMoto=~/$kensaku($i)/){;}else{next;} } としても@kensaku全てにマッチしたデータだけを抜き出すことが出来ません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ヒントなのか、答えなのか微妙ですが・・・アドバイスとして書きますね(^ ^; 何回ヒットしたかをカウントすれば実現できます。 $count = 0; for($i=0;$i<@kensaku;$i++){ if($kensakuMoto=~/$kensaku($i)/){ $count++; }else{ last; } } if($count == $#kensaku+1){    #ヒットしました。 }else{    #ヒットしませんでした。 } こんな感じでどうでしょう?

ctpsys
質問者

補足

お返事ありがとうございます。 カウントする方法、ありがとうございます。 目から鱗です。 早速ためさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • KUJIYA
  • ベストアンサー率34% (53/152)
回答No.2

for($i=0;$i<@kensaku;$i++)が、 for($i=0;$i<$#kensaku+1;$i++) $kensaku($i)が $kensaku[$i]がならperlでしょうけど、なんか違いますよね? こういう書き方もアリなんでしょうか。勉強不足ですいません。 perlなら数字と配列文字列の比較って出来ましたっけ? 全てにマッチをこの形式でやるなら、forの前に$flg=0を 設定して、else{$flg=1}を書いておけば、forを抜けた時に 全てにマッチしたかどうかを$flgでチェックできます。 でもこの文だと全てにマッチしているかどうかはチェック できても、何を抜き出すのかわかりません。 $kensakuMotoが AB,ABC,BC,BCD として $kensaku($i)が AB BC だとしたら条件は満たせますがそれしかわかりません。 $kensakuMotoが AB,ABC BC,BCD として $kensaku($i)が AB BC だとしたら1行目のみ条件を満たしますが、この場合は $kensakuMotoを\nでsplitして配列化してforeachで各行について 上の検査をしないと正常に検査されないように思います。 ヒントでも、ということで書いてみました。 的外れだったらごめんなさい。

ctpsys
質問者

補足

お返事ありがとうございます。 $i<@kensakuは要素数が入るので多分OKかと。 $kensaku($i)はご指摘の通り$kensaku[$i]の間違いでした。 今回の比較は、全て文字列です。ともにチェックボックスから 入力したデータで大丈夫かと。 else{$flg=1}のアイデアありがとうございます。 早速ためしてみます。 改行がある場合も、アドバイスいただいてありがとうございます。 今回は、改行は入りませんが、今後の参考にさせていただきます。 大変ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A