- ベストアンサー
外部のCSVファイルをPHPで読み込み、出力させたい
- PHPを使用して外部のCSVファイルを読み込み、特定の行からデータを出力する方法を教えてください。
- 具体的には、1ページ目にCSVの1〜10行目を、2ページ目にCSVの11〜20行目を出力したいです。
- 既存のコードではうまくいかなかったため、他の方法でも構いません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>> やはり、2ページ目が表示されませんでした。 申し訳有りませんでした。バグが入っていたようです。 動作しない場合を考えて 考え方を説明します。 1.ページに応じて、($page-1)×10 の行を読み捨てる 2.10行表示してループを抜ける それだけです。 現在 当方で実行確認できないので一応、目視によるデバッグしたソースを添付します <?php $page=2; // ページ番号 1から10のいずれかを設定 $fp = fopen("data.csv", "r"); $repeat = 10; $count = 0; while ($data = fgetcsv($fp, 10000)) { if ($count < $repeat*($page-1)){ $count++; // <= これを忘れていたので永久ループでした continue; } if ($count >= $repeat*$page) break; print<<<EOD $data[0] EOD; $count++; } fclose ($fp) ?>
その他の回答 (2)
- mpx
- ベストアンサー率71% (149/209)
>> //行数を取得して、最後尾の行番号を取得 >> //全行数>リピート数×ページ数 なら 次のページへのリンクを作る >> といった部分を足すにはどのように書けばよろしいでしょうか? $line_number = count(file('data.csv'));//行数取得 if($line_number > $page*$repeat){ print "<a href=\"?page=".($page+1)."\">次のページへ</a>\n"; } //受け側phpでは以下のコードで$pageに値を読み込みます if (isset($_GET['page']) && (intval($_GET['page'])>0)){ $page=intval($_GET['page']); } else $page=1;
お礼
ご指導、大変有り難うございました! お陰様で完成致しました! 今までより更新がとても楽になり、大変感謝しております。 これを機にphpをもっと勉強していきたいと思います。 この度は、本当に有り難う御座いました!
- mpx
- ベストアンサー率71% (149/209)
できるだけ元のコードを利用して修正すると下記になるかな 先頭の$pageの値を書換えれば所望のページが得られるはずです <?php $page=2 // ページ番号 1から10のいずれかを設定 $fp = fopen("data.csv", "r"); $repeat = 10; $count = 0; while ($data = fgetcsv($fp, 10000)) { if ($count < $repeat*($page-1)) continue; if ($count >= $repeat*$page) break; print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?>
お礼
mpx様 早速のお返事有り難うございます。 お教え頂いたコードを記入させて頂いたのですが、 やはり、2ページ目が表示されませんでした。 お手数をお掛けしますが、ご修正頂けると幸いです。
お礼
デバッグしたソースで無事に2ページ目も表示されました! 本当に有り難う御座います。 贅沢とは思うのですが、 csvの行数を読み込んで、次のページが有る場合は(今回の場合は10ページ)、自動で次のページへのリンクを作りたいのですが、 //行数を取得して、最後尾の行番号を取得 //全行数>リピート数×ページ数 なら 次のページへのリンクを作る といった部分を足すにはどのように書けばよろしいでしょうか? サイトで色々検索したのですが、 //行数を取得して、最後尾の行番号を取得 $line_number = sizeof(ここには$fp?) -1; //全行数>リピート数×ページ数 なら 次のページへのリンクを作る if($line_number > $page*$repeat){ print "<a href=\"?=".($page+1)."\">次のページへ</a>\n"; } の組み合わせ方が分からないのでご指導頂けると大変助かります。 よろしくお願い致します。