- ベストアンサー
PHPでdata.csvを読み込み、入荷日順に表示するプログラムの作り方
- PHPでdata.csvを読み込み、入荷日順に表示するプログラムを作りたい方へのアドバイスです。
- data.csvから1行ずつ取り込んできて、入荷日順にソートする方法がわからないという初心者の方へのサポートです。
- 本やソースコードを参考にしても難しく感じる場合、具体的な手順やコードのサンプルを提供しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
他にも何か良い方法がある気がしますが、ざっくり書いてみました。 ページネーションなんて気の効いたものはありません。 <? $me = $_SERVER[SCRIPT_NAME]; $DimData = array(); // テスト用ゴミ配列作成 for($i=0;$i<20;$i++) { $DimData[$i] = sprintf("%03d" , $i); } // 1ページに表示する最大数 $row = 10; $Page = $_GET[Page]; // 最初のアクセス用 if (!$Page) { $Page = 1; } // ページの最大数を算出(なんか計算が怪しい) $PageLimit = (int) ((count($DimData)-1) / $row) + 1; // 10行表示 for ($i=0;$i<$row;$i++) { print $DimData[((($Page - 1) * $row) + $i)] . "<br>"; } // 戻るリンク $Back = ($Page > 1) ? "<a href=$me?Page=" . ($Page - 1) . ">1ページ戻る</a>" : "<font color=gray>1ページ戻る</font>"; // 進むリンク $Next = ($Page < $PageLimit) ? "<a href=$me?Page=" . ($Page + 1) . ">1ページ進む</a>" : "<font color=gray>1ページ進む</font>"; print "<hr>$Back ($Page / $PageLimit) $Next<hr>"; ?>
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
考え方は2つ。 1.ひとつは全部のデータを配列に読んでしまって、ソートをする。 配列のソート処理は比較的高速なのでソート処理はプログラムにまかせます 2.読みこむ際に、上位10個のデータを順次配列にいれていく あらたに上位にきたら下位からデータをすて、上位にいれます。 1は処理は簡便で、データの汎用性や再利用性がたかいですが、データ量が増えたときに、 無駄にメモリをくい、処理がおそくなります。 2はデータ量に依存せず効率的な処理ですが、冗長なため、ソートしたい項目ごとに フローの調整が必要になります。 大規模なデータを取り扱うときはデータベースを活用することになります。
お礼
なるほど、ありがとうございます。 データベースまでは必要ないかなと思いました。
- bm_hiro
- ベストアンサー率51% (200/388)
ざ~っと、ゴミプロ書いてみました。 参考になれば幸いです。 <? $DimData = array(); // とりあえず、CSVファイルを二次元配列に取り込み。 $fp = fopen("data.csv" , "r"); while ($DimJob = fgetcsv($fp , 1000 , ",")) { $DimData[] = $DimJob; } fclose($fp); // ソート前 print_r($DimData); // ユーザー定義関数でソート usort($DimData, "cmp"); // ソート後 print_r($DimData); // 多分、日付の比較の仕方としてはおかしいけど、とりあえず動くみたい。 function cmp($cmp01, $cmp02) { // 入荷日で比較 return strcmp($cmp01[2], $cmp02[2]); // ↓こうすると出荷日で比較 //return strcmp($cmp01[3], $cmp02[3]); } ?>
お礼
親切丁寧にありがとうございます。 このあと、10件ずつ表示させるのに参考になる情報ありませんでしょうか?
お礼
親切丁寧なご回答をありがとうございました 回答内容を参考に精進してまいりたいと思います。 ありがとうございました