CSVで指定した行から出力をする方法

このQ&Aのポイント
  • CSVファイルから指定した行数のデータを出力する方法について教えてください。
  • 指定した行から出力をするためのコードの修正方法を教えてください。
  • 30件のデータを取得するコードを修正して、31行目以降のデータを出力する方法を教えてください。
回答を見る
  • ベストアンサー

CSVで指定した行から出力をする方法

CSVから、30件データを取得するために最下部のようなコードを書きました。 しかし、「次のページ」等でもう30件(つまり31行目から)データを出力させたい場合は、どこをどのように修正すればいいのでしょうか。 $fp = fopen("exmple.csv", "r"); $repeat = 30; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print($data[0]. $data[1]. $data[2]); $count++; } ご回答お願いします。

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

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

  • ベストアンサー
回答No.1

<?php //何ページ目かをGETなどで取得して$pageに代入(初期値は1) if(isset($_GET['page']) && is_numeric($_GET['page'])){ $page = (int)$_GET['page']; }else{ $page = 1; } $page_start = (($page - 1) * 30) + 1; $page_max = $page * 30; $fp = fopen("exmple.csv", "r"); $i=1; while ($data = fgetcsv($fp, 10000)) { if($i < $page_start){ $i++; continue; }elseif($i <= $page_max){ print($data[0]. $data[1]. $data[2]); }else{ break; } } ?> こんな感じですね。 fopenで開いたファイルは、必ず先頭から読んでいきますので、 規定の行に来るまではfgetcsvだけして、処理を行わないで空転させる、という事になります。

fmfmnext
質問者

お礼

処理を行わないで空転させる事で対応できるんですね。 ありがとうございます。

関連するQ&A

  • 外部のCSVファイルをPHPで読み込み、出力させたい

    下記の質問を参考に外部のCSVファイルをPHPで読み込み、出力させるphpを書きました。 http://oshiete1.goo.ne.jp/qa1615206.html data.csvは "データ01" "データ02" "データ03" ・・・ といったように100行書いてあります。 <1ページ目に記述したphp> <?php $fp = fopen("data.csv", "r"); $repeat = 10; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?> 2ページ目には11行目からのデータを出力したいと思い、 $data[0]の部分を$data[11]に変えたり、 $repeat = 20; $count = 11;にしたりしたのですが、 両方ともうまくいきませんでした。 2ページ目にcsvの11行目からのデータを出力するにはどうすればいいのでしょうか? 私がしたいことは、1ページ目にcsvの1~10行目を、2ページ目にcsvの11~20行目を出力したいとおもっております。 上記のphp以外の記述でも構いませんので、どなたかお分かりになる方がいらっしゃいましたら是非教えて下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP
  • PHPでCSVファイルを呼び出す条件の複数指定

    PHPでCSVファイルを呼び出すことを考えています。 下記のようなデータがあり、5000番以上の4銘柄を抽出したいと考えています。 4996 クミアイ化学工業 345 4997 日本農薬 456 4998 フマキラー 1215 4999 セメダイン 456 5002 昭和シェル石油 1025 5007 コスモ石油 2451 5008 東亜石油 1265 5009 富士興産 998 5010 日本精蝋 562 5011 ニチレキ 412 下記のようにしたのですが表示されません。 && ($data3 < $number)を外すと、下から4つ(4996-4999)が表示されます。 (5000番以上という選択ができません) どこが間違っているかご教示戴けますでしょうか? よろしくお願いいたします。 <?php $fp3 = fopen("kabu.csv", "r"); $repeat = 4; //表示する件数 $count = 1; $number = 5000; while (($data3 =fgetcsv($fp3, 10000)) && ($data3 >$number)) { if ($count > $repeat) { break; } print($data3[1]); print($data3[0]); print($data3[2]); $count = $count + 1; } fclose ($fp3) ?>

    • ベストアンサー
    • PHP
  • PHPで、CSVファイルを、指定した行数だけ出力するには?

    同じようなトピックは、いくつかありましたが、あと一歩、わからないので質問させてください。 CSVファイルをPHPを使って読み込み、出力させる場合で、 CSVファイル data.csv --------------------------- データ1,説明,詳細 データ2,説明,詳細 データ3,説明,詳細 データ4,説明,詳細 データ5,説明,詳細   … データ100,説明,詳細 --------------------------- 上記のように100行あったとします。 この時、 PHPファイルを、 --------------------------- <?php $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { $num = count ($data); print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; } fclose ($fp) ?> --------------------------- と書くと、100行目まで普通に出力してしまいます。 もし、10行目までを出したい場合は、どう記述すればよいのでしょうか? 上記のPHPソースに少し書き加える形で解決できればと思うのですが・・・ 色々試しましたが、私の力だけでは無理でした。

    • ベストアンサー
    • PHP
  • csvファイルを配列へ格納しブラウザへ出力

    <?php #CAT csvファイルを開く $fp_c = fopen("test.csv","r"); #domain csvファイルを開く $fp_domain = fopen("test.csv","r"); print "<table border='1'>"; #fgetcsv関数がfalseを返却するまで実行 while($c_data = fgetcsv($fp_c)){ print "<tr>"; #csvファイルの列数だけ実行 for($i=0;$i<count($c_data);$i++){ print "<td>".$c_data[$i]."</td>"; } print "</tr>"; } print "</table>"; var_dump($c_data); fclose($fp); ?> このようなプログラムをつくってcsvファイルの各セルを配列$c_data[$i]へ格納している(つもり) なのですが、var_dump($c_data);を入れると bool(false)と表示されてしまいます。 このプログラムではcsvファイルの中身を表示できても配列に格納されていないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP5でCSVの指定行データだけを取得するには?

    PHP初心者です。 下記のような方法で全てのデータを取得する方法があると知りました。 $fp = fopen("url.csv", "r"); while ($data = fgetcsv($fp, 1)) { foreach ($data as $d) { print $d . "<br>\n"; } } しかし指定行、例えば10行目等だけを取得する方法がわかりません。 CSVは1列で1000行ほどあります。 恐れ入りますが具体的なソースを教えてくださいませ。

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • CSVでアップロードしたデータのランダム表示

    はじめまして。 質問させてください。 CSVでアップロードしたデータをランダムで表示させたいのですが、 私自身、PHPの知識がほとんどなく困っています。 CSVで15件程の商品データをアップロードし、その中から5件をhtml上に ランダムに表示したいと考えています。 #CSV hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー (15件ほど) #PHP <?php $fp = fopen("hoge.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count == 6) break; print <<<EOD <div class="hoge"> <p class="hogehoge"><img src="hoge/$data[0]" /></p> <dl> <dt><a href="hoge.html">商品名:$data[1]</a></dt> <dd>価格:$data[2]</dd> <dd>評価: $data[3]</dd> <dd>レビュー:$data[4]</dd> </dl> </div> EOD; $count++ ; } fclose($fp) ?> と自分なりに試してみたのですが… 15件のうち5件だけを表示することはできたのですが、 それをランダムに表示するにはどこをどうしたらいいのやら… といった状況です。 どうか、お力をお貸しください。

    • ベストアンサー
    • PHP
  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • csvの内容を行単位で削除したい

    getでidを渡し(id.php)、受け取った別のphp(sakujyo.php)ファイルで そのidが含まれているリンクをクリック後 削除したいのですが 削除の方法がどのサイトをみても 私の理解力不足+知識不足で理解ができませんでした。 ロジックは一旦すべてのファイルを読み込んで 特定の行を削除後、再度上書きという流れは わかったのですが、それをプログラムに書き直すと どうしてもその通りできませんでした。 ==csvの内容== [id1],[ふりがな1],[なまえ1],[tel1] [id2],[ふりがな2],[なまえ2],[tel2] [id3],[ふりがな3],[なまえ3],[tel3] <id.phpのソース> <?PHP $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; echo "<a href=\"sakujyo.php?$id\">$id</a><p>"; } ?> <sakujyo.phpのソース> <?PHP $id_url = $_GET['id']; $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; //ここから下がどうすればいいの悩んでいます。 if($id_url = $id){ $id = ""; $furigana = ""; $name = ""; $tel = ""; } $fp = fopen("data.csv","a"); fwrite($fp, "$id, $furigana, $name, $tel\n"); } ?> sakujyo.phpの if($id_url = $id){ から下は変数を空にしているだけで 結果は行の削除ではなく,,,,を書き込んでいると思うのですが それ以外に方法が思いつきませんでした。 このCSVファイルの行単位の削除方法をご存知の方がいらっしゃいましたら大変恐縮ですがご指導を頂戴できませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP