• 締切済み

csvのデータをphpで表示する方法を教えてください。

csvの中の特定の文字をphpで検索する方法を教えてください。 僕がためしたのは以下です。 ------------------------------------------------------------- <? $PTR = fopen( "./test.csv", "r" ); if( $PTR == FALSE ){ die( "file open error!!" ); } $Key = $_GET["val"] ; $Size = strlen( $Key ); while($Str = fgets( $PTR, 1024 ) ) { $Code = substr( $Str, 0, $Size ); if( $Code === $Key ) { echo $Str; break; } if( $Key <= $Code ){ break; } } fclose( $PTR ); ?> ------------------------------------------------------------- ですが、これだと頭の文字がマッチしなとヒットしないんです。 たとへばcsvに以下が入ってるとします。 あきら いちご えなり この[あきら]をヒットしたい場合、getで渡す文字を[あきら]や[あ]ならヒットします。これを[き]や[ら]だけの文字検索でも[あきら]と表示されるようにしたいのです。 最悪php自体全部変えてもいいので、誰か教えてください。 条件として携帯電話からも検索できるものに限ります。 ※機種依存はX

みんなの回答

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

csvデータなのですよね? 各行の項目は1つしかないのでしょうか? カンマ区切りで全データを検証するならこんな感じでしょうか <? $key = $_GET["val"] ; $handle = fopen("test.csv", "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { foreach($data as $val){ if($key!="" && preg_match("/{$key}/",$val)) print $val; } } fclose($handle); ?>

すると、全ての回答が全文表示されます。
  • fire--
  • ベストアンサー率49% (146/293)
回答No.2

マルチバイト文字を扱うのなら、mb系の関数を使わないといけないです。 mb_substrとか。 この用途だと、mb_ereg_matchのほうが良いと思います。 http://www.php.net/manual/ja/ それから、 ・$_GETから取り出した値は、strip_tagsとかhtmlspecialcharsとかを  通しておくのがセキュリティ面からみてよいです。 ・「条件として携帯電話からも検索できるものに限ります」という事ですが、phpはサーバ側で動くので、検索ロジックの部分については機種依存 しようがないですね。結果を出力する部分は注意が必要です。

takuto1983
質問者

補足

mb_strposを使用してみたんですけど、時々違う文字なのにひっかかるのがあるんですが、やっぱりmb_strposだからなんでしょうか? phpは詳しくなくてもしmb_ereg_matchを使う場合、mb_strposの行をmb_ereg_matchに変えるだけでいいのでしょうか? たとえば // 検索ワードに一致するか確認 if (strlen ($keyword['com'])) { $found['com'] = mb_strpos ($com, $keyword['com']); } の部分を // 検索ワードに一致するか確認 if (strlen ($keyword['com'])) { $found['com'] = mb_ereg_match ($com, $keyword['com']); } とするだけでよいのでしょうか?

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

$Strのどこかに$Keyを含んでいたら$Strを出力する、という仕様に substr関数はそぐわないと思います。 strstr関数あたり(他にふさわしい関数があるかもしれませんが)に ついて調べてみてはいかがでしょうか。

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

関連するQ&A