![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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
A 回答 (3件)
- 最新から表示
- 回答順に表示
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);
?>
No.2
- 回答日時:
マルチバイト文字を扱うのなら、mb系の関数を使わないといけないです。
mb_substrとか。
この用途だと、mb_ereg_matchのほうが良いと思います。
http://www.php.net/manual/ja/
それから、
・$_GETから取り出した値は、strip_tagsとかhtmlspecialcharsとかを
通しておくのがセキュリティ面からみてよいです。
・「条件として携帯電話からも検索できるものに限ります」という事ですが、phpはサーバ側で動くので、検索ロジックの部分については機種依存
しようがないですね。結果を出力する部分は注意が必要です。
この回答への補足
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']);
}
とするだけでよいのでしょうか?
No.1
- 回答日時:
$Strのどこかに$Keyを含んでいたら$Strを出力する、という仕様に
substr関数はそぐわないと思います。
strstr関数あたり(他にふさわしい関数があるかもしれませんが)に
ついて調べてみてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つの画像ファイルが異なるファ...
-
PHPでテキストファイルかどうか...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
「警告:ページの有効期限切れ...
-
「@$変数」の「@の意味は?」
-
リンク先を隠す方法はないでし...
-
現在位置より2つ上のディレク...
-
Subversionのリポジトリの削除
-
VB6にてメールを送信する方法
-
パースエラーとは?
-
XAMPPでSQL文を流すとフリーズ...
-
データ送信をボタンを押さずに...
-
【file_exists】ファイルが存在...
-
URLが.PHPってどういう...
-
Smarty includeでテンプレート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つの画像ファイルが異なるファ...
-
stat failed
-
PHPでFilename cannot be empty...
-
XMLのロードに失敗する
-
ファイルの行数取得
-
日本語が文字化けしないよう読...
-
ファイル名は、数字の「0」(...
-
PHPで特定の文字列のみ抽出し、...
-
php4、php5によるimplode()、fi...
-
テキストファイルの読み込みと...
-
CSV出力
-
二次元配列のソートのやり方が...
-
phpのftp_get()でエラーが出ます。
-
日本語のファイルが開けない
-
Smartyで吐き出されたhtmlソー...
-
PHPでの別のサーバーのテキスト...
-
ファイルについて・・・。
-
ファイルの読み込み方法について
-
TSVファイルをCSV形式に変換したい
-
PHPでテキストファイルかどうか...
おすすめ情報