• ベストアンサー

検索方法

PHPのfgetcsvの関数でCSV内のデータを表示させる事はできました。 検索機能をつけようと思ってるのですが mb_preg_matchを使用するコードを是非書いて頂きたいです。 よろしくおねがいします><

noname#149235
noname#149235
  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

で、どういう検索なの? (1)キーワードを3つ渡して$data[1],$data[2],$data[3]のすべてに完全一致するもの? (2)キーワードを1つ渡して$data[1],$data[2],$data[3]のどれかに完全一致するもの? (3)キーワードを1つ渡して、$data[1],$data[2],$data[3]のどれかに部分一致するもの? 仕様がわからないのでなんとも言えません。 出力はヒットしたらprintすればよいのですね? う~んはっきりいえば前回の回答でほとんど回答がすんでるとは思いますが どこがわからないのでしょうか・・・ ちなみにfgetcsv()は序数は0~始まるので$data[0]からなのですが ほんとうに$data[1]~[3]のデータでよいのでしょうか???

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

csvから読み込んだデータをどのようにもっていて、 検索した結果をどう表現したいのか書かないと・・・ とりあえずはこんな感じ。 <? $array=Array( Array("aaa","bbb","ccc") ,Array("iii","jjj","kkk") ,Array("j123","j456","789j") ,Array("xxx","yyy","zzz") ); $keyword="j"; $count=0; foreach($array as $rownum => $row){ foreach($row as $colnum =>$val){ if(preg_match("/".preg_quote($keyword,"/i")."/",$val)) $res[]=(Array("col"=>$colnum,"row"=>$rownum,"text"=>$val)); } } print "<pre>"; print_r($res); print "</pre>"; ?>

noname#149235
質問者

補足

申し訳ないです {$data[1]} {$data[2]} {$data[3]}のデータを検索したいのです。 よろしくおねがいします。 <?php $csv = fopen ("system.csv", "r") or die(print "ファイルが見つかりませんでした。"); while ($data = fgetcsv ($csv, 1000,",")) { print<<<eof {$data[1]} {$data[2]} {$data[3]} eof; } fclose($csv); ?>

関連するQ&A

  • csvファイルの読み込み

    このカテゴリを"csv"で検索してみましたが、同じような質問がなかったので、質問します! phpのfgetcsv()関数がありますが、 これって、日本語が混じるcsvでも問題なく動作しますでしょうか。 例えば、郵便番号CSVをfgetcsv()でとりこんでみたら、12万件中数十件で読み取りを間違えてました。(カンマで区切らずに一部つなげて読んでいる) 自分でcsvを解析する関数を作らないといけないのか、fgetcsv()でもうまく動かせるものなのか思案しています。 似たようなことで困ってる方、解決された方いらっしゃいますでしょうか。 よろしくお願いしいます。

    • 締切済み
    • PHP
  • 文字検索

    22歳。新人PGです。 さっそく質問させていただきます。 入力された文字を元に、CSVファイルの中の文章に含まれるものを 検索し、表示するという機能を作成してるんですが、 半角カタカナを入力された場合、意としない文字まで検索に ひっかかってしまします。 ≫CSVファイルの中身 123,あああいいいいうう 124,あああああおおおおお 125,ぽぽぽいいいいえええ ・ ・ ・ ex. 「カレー」と半角カタカナで入力すると、 「カレー」という文字が含まれる文章は検索でひっかかりますが、 「学生レーサー」というものまでもひっかかってしまいます。 文字コードが関係しているのでしょうか? 何か良い解決方法があればお願い致します。 ちなみに、CSVファイル及びPHPソースファイルは全てSJISで、 preg_match("/入力値/",$sentence)で検索しています。

    • ベストアンサー
    • PHP
  • 【PHP】「ereg_match」はなぜ不人気なのか?

    PHP初心者です。 現在ファイルの中を英語や日本語で検索するプログラムを作っています。 検索といえば「preg_match」が一番人気あるように見えます。しかしたとえば、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); if(preg_match( '/我輩は.である/' ,'我輩は猫である')){ print "マッチ!"; } 上記のような使い方をすると「.」は「猫」にマッチせず「...」にするとようやくマッチします。「preg_match」はマルチバイトに対応していないのでしょうか。 そこでマルチバイトと正規表現に対応した検索関数「mb_ereg_match」を知りました。 if(mb_ereg_match( '我輩は.である' ,'我輩は猫である')){ これなら正常にマッチします。 がしかし… 「mb_ereg_match」は全然辞書に載ってません。分厚いPHP辞書をいくつも持ってますが「ereg_match」すら載ってません。何か不人気の理由があるのでしょうか?気に入ったのに不安で使えません。 お詳しい方、解説よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPのサイト内検索の結果をCSVに書き出すには

    Webサイトのサイト内検索が、どれくらい使用されているか調べるため、 検索結果をCSVで書き出したいと考えております。 php初心者のため、苦戦しております。 詳しい方がいらっしゃいましたら、ご教示ください。 サイトはCodeIgniter(コードイグナイター)を使用しており、PHP5.3.3です。 サイト内検索の仕組みは、form actionを使用しており、 htmlに記載のコードは以下です。 ------------------------------------------------------------------------------------------------------- <form action="search.php" method="get" data-form-id="keyword_webcode-search"> <input name="keyword_webcode" type="text" value="" rel="キーワード検索出来ます。"><br> <input type="submit" value="データを送信"> </form> ------------------------------------------------------------------------------------------------------ データ送信先のsearch.phpに書き出すためのコードを追加しておりますが、 何も起こりません。 コードを追加するファイルが間違っているのでしょうか? 追加したコードは以下です。 ------------------------------------------------------------------------------------------------------- $csv = fopen('file.csv', 'a'); fputcsv($csv, $ShiftJIS); fclose($csv); ------------------------------------------------------------------------------------------------------- 色々試してみましたが、うまく行かず行き詰まっています。 どなたかアドバイスいただければと思います。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • 検索してる時・・・

    PHP勉強初めて数週間です。不安なので質問させていただきます さっきGOOGLEでPHPの関数を検索してたんですが、知らないサイトのPHPのコードを見る事ができました。 PHPのコードって普通ソースを表示しても見る事ができませんよね? でも見れたんです! これってやばくないでしょうか? どういうことなんでしょうか?ご説明よろしくおねがいします

    • ベストアンサー
    • PHP
  • 【PHP】""のないCSVを fgetcsv() で読む方法は?

    PHP5使用者です。 CSVを fgetcsv() で読み込みたいのですが初めてのためうまくいきません。対象のCSVは囲み文字の""がありません。 日本語が含まれているため""がないせいで読み込み後、文字化けを起こしています。 専門書によると fgetcsv($fp, 読み込み長さ, 区切り文字, 囲み文字) らしいのですが、囲み文字なしのCSVはどうするかは書いていません。 そもそもfgetcsv()で囲み文字のないCSVを読むこと自体無理なのでしょうか? お詳しい方、よろしくお願いいたします。

    • 締切済み
    • PHP
  • CSV読込(fgetcsv関数)で「手」が出ない…

    1マスに「手」と書いたCSV(文字コードSJIS)を fgetcsv関数(PHPファイルはEUC-JP)で取得し、 取得情報を1行づつ mb_convert_encoding($data, "EUC-JP", "SJIS"); でエンコーディングしたのですが、「手」だけを書いたマスのみ読込めません。 他の文字を書いたマスは正しく読込まれています。 こういう事象に陥った方おられませんでしょうか? また解決策をご存知の方がおられましたらご教授頂けないでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ファイル内の検索・表示方法

    PHP初心者です。 どうしても分からないので、質問させていただきます。 -----data.txt----------------- 2004/01/01,2005/04/01,aaaaaaaaaaaaaaaaaa 2004/01/03,2004/01/01,nnnnnnnnnnnnnnnnnn ・ ・ ------------------------------ index.php、data.csvの2つのファイルを使用します。 PHPでdata.txtのファイル内を検索し、 最初から一行ずつ、data.csvの第一フィールド・第二フィールド(2004/01/01,2005/04/01)の日付と 「2004/02/01」を比較し、第一フィールド・第二フィールドともに「2004/02/01」以前だったら、 その行を出力し新規ファイルに書き出し。 というスクリプトを作成したいのですが、どうなりでしょうか? どなたかご教授ください。

    • 締切済み
    • PHP
  • CSVを「,」区切りでわける方法について

    PHPのプログラムで以下のようなCSVを「,」区切りで分解する方法を教えてください。 山田,太郎,"123,000",鈴木,康嗣 ← CSVの1行(サンプル) 上記のCSVを「,」区切りで以下のように区切りたいと思っています。 山田 太郎 123,000 鈴木 康嗣  しかし普通に分解すると「123,000」も「123」と「000」に分解されてしまいます。 「123,000」は、金額を表すのでここだけは、分解したくないのです。  なんとなく正規表現でできそうな気がするのですが、勉強があまりできてないせいか、 よく分かりません。どのようにすればいいのでしょうか?よろしくお願いいたします。  使用する関数は、「preg_split()」、「split()」、「preg_match()」を使って作ろうとしています。

    • ベストアンサー
    • PHP