こんにちは。いつも参考にさせてもらっています。
さて、下記のコードはcsvのデータをphpにて読み込み、各項目ごとに分割をして、指定した行のみをtableに表示させているのですが、実際は行を指定するのではなく、特定のキーワードを指定し、その指定したキーワードの行をtable上に表示させたいのです。
自分なりに調べてみたのですが、うまくいかない理由がわからなかったので今回投稿させて頂きました。
よろしくお願い致します。
<?php
$openfile = file_get_contents('sq-tyo.csv');
$csv_gyo = split("\n", $openfile);
echo "<div>";
list($from, $class, $to, $type1, $type2, $kikan) = split(",", $csv_gyo[0]);//1行目
echo "<table>";
echo "<tr>";
echo "<td>";
echo "<b>出発地</b>";
echo "</td>";
echo "<td>".$from."</td>";
echo "<td>";
echo "<b>座席クラス</b>";
echo "</td>";
echo "<td>".$class."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b>目的地</b>";
echo "</td>";
echo "<td>".$to."</td>";
echo "<td>";
echo "<b>種類</b>";
echo "</td>";
echo "<td>".$type1."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b>経路</b>";
echo "</td>";
echo "<td>".$type2."</td>";
echo "<td>";
echo "<b>期間</b>";
echo "</td>";
echo "<td>".$kikan."</td>";
echo "</tr>";
echo "</table>";
?>
本当はデータベースを使用したいのですが、今回はcsv使用のみと言われてしまったので、ご協力をお願いいたします。
No.3ベストアンサー
- 回答日時:
なるほどです
となると、やはりtany180sxさんのやり方になります
//キーワードを取得
$keyword = $_GET['keyword'];
//先にテーブルのヘッダー行を書き出します
//省略
//ここから検索&該当行の書き出し
foreach ($csv_gyo as $key => $val) {
//ここでmb_strpos関数でCSVの行を検索しています
if (mb_strpos($val, $keyword) === false) {
continue;//キーワードが見つからない場合はループをひとつ飛ばして次の行へ
}
//キーワードが見つかった場合のみ以下のコードが実行されます
list($from, $class, $to, $type1, $type2, $kikan) = split(",", $val);
//ここにテーブルを書き出すコードを書きます
echo '<tr>';
//省略
echo '</tr>';
}
//テーブルを閉じます
echo '</table>';
検索のところは
CSV行のなかに$keywordがあるかどうかをチェックするだけです
検索方法は正規表現を使用するなど、いくつか方法はあります。
"php 文字列 検索" 等で検索すればやり方がいくつか見つかると思います。
上記のコードでうまく検索できない場合は、
日本語を含んでいますのでPHPの文字コードとCSVの文字コードが異なっている
可能性が考えられます。
その場合は、文字コードを統一するか
検索時にキーワードとCSV行の文字コードをmb_convert_encodingで合わせるとか…
mr_arakiさま
ご丁寧なご回答ありがとうございます。
おかげで無事解決いたしました。
まだまだ勉強しないことが多いと、改めて思わさせられました。
今回はどうもありがとうございました。
No.2
- 回答日時:
はじめまして
基本的にはtany180sxさんのやり方で大丈夫だと思いますよ
それかもしかして指定行ではなくて指定列のことですか?
たとえば期間を指定されたら期間だけを表示みたいな??
同じようなことを実現しているサイト等があれば、非常に参考になります。
この回答への補足
こちらこそはじめまして。ご回答ありがとうございます。
tany180sxさんの方法を参考に書下記コードを作ってみましたが、指定したキーワードのみの行だけでなく、csvの中にあるすべての行が表示されてしまいました。
<?php
$openfile = file_get_contents('sq-tyo.csv');
$csv_gyo = split("\n", $openfile);
$keyword = 'TGおすすめ';
foreach ($csv_gyo as $key => $val) {
list($from, $class, $to, $type1, $type2, $kikan) = split(",", $val);
echo "<table>";
echo "<tr>";
echo "<td>";
echo "<b>出発地</b>";
echo "</td>";
echo "<td>".$from."</td>";
echo "<td>";
echo "<b>座席クラス</b>";
echo "</td>";
echo "<td>".$class."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b>目的地</b>";
echo "</td>";
echo "<td>".$to."</td>";
echo "<td>";
echo "<b>種類</b>";
echo "</td>";
echo "<td>".$type1."</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<b>経路</b>";
echo "</td>";
echo "<td>".$type2."</td>";
echo "<td>";
echo "<b>期間</b>";
echo "</td>";
echo "<td>".$kikan."</td>";
echo "</tr>";
echo "</table>";
}
?>
csvは下記のような感じです↓
,東京,エコノミー,ソウル,FIX,往復,2-14日間
TGおすすめ,東京,エコノミー,バンコク,FIX,往復,2-6日間
,東京,エコノミー,上海,FIX,往復,2-10日間
上記1列目にある「TGおすすめ」の行以外はhtmlに表示させたくないようにしたいのです。
初心者的な質問で大変申し訳ありませんが、ご教授いただけますようよろしくお願いいたします。
No.1
- 回答日時:
> うまくいかない理由がわからなかったので
ループが分からないのでしょうか?検索?
$keyword = 'hoge';
foreach ($csv_gyo as $key => $val) {
if (mb_strpos($val, $keyword) === false) {
continue;
}
list($from, $class, $to, $type1, $type2, $kikan) = split(",", $val);
echo '<table>';
echo '</table>';
}
PS.ご自分で作成されたシンプルなCSVならこのsplitで大丈夫ですが
Excel等で作成されたものなら不具合が生じます。
この回答への補足
ご回答ありがとうございます
>ループが分からないのでしょうか?検索?
行数指定でやると、後からもし行が足された時につじつまが合わなくなってしまうので、それを避けるための方法を考えています。
上記だと行を行数指定で認識させてテーブルにはきだしているのですが、私がやりたいのは、ある特定の1つのキーワードを指定して、そのキーワードのある行すべてをテーブルに表示させたいのですが、その方法がよく分からないのです。。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで訪問回数を表示するカウン...
-
PHPでのパスワード制限のセキュ...
-
syntax error, unexpected 'ech...
-
PHPにて変数をテキストファイル...
-
PHP mysql_fetch_assocについて
-
『週間』カレンダーのサンプル!
-
batファイルでドロップしたデー...
-
switch()文で値の大小比較
-
Javascriptの関数をPHPで作りま...
-
batファイルでPC名称の変更
-
phpでcookieがうまく保存されない
-
php for文
-
foreachで回った数を表示したい
-
wordの差し込み印刷で文字...
-
TreeViewのChild Node
-
header と session の順番
-
Windowsのマクロプログラムで、...
-
「ページネーション」で検索キ...
-
Yahoo! JAPAN IDを新規取得でき...
-
ps3で久しぶりにCDの音楽情報取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
findstrのerrorlevel
-
syntax error, unexpected 'ech...
-
小数点以下0の非表示
-
バッチファイルで、全てのウィ...
-
オブジェクトの中身の判定(PHP)
-
PHPで訪問回数を表示するカウン...
-
ゼロとNULLを区別して number_f...
-
bashの関数の引数にスペースが...
-
ナベアツプログラム(3の倍数...
-
変数の受け渡しによる画像の表示
-
PHP一覧表示した項目にリンクを...
-
Windowsのsetコマンドでの小数...
-
Parse error というエラーの対...
-
pdftkを使った処理をバッチファ...
-
DBのハッシュ化したパスワード...
おすすめ情報