スレッド表示 | フラット表示〕 全トピック 923 件中 277 番目 次≫ ≪前

CSVデータを20件づつ取り出す

created: 2006-02-15 19:30 | modified: 2006-02-18 23:21 | reply: 14

[2930] ページング

user: ぱぴよん | created: 2006-02-16 10:38
江戸川さんこんにちは、ぱぴよんと申します。


レコード数が多いものを表示するときに江戸川さんがおっしゃられるように
数件だけ表示し、前のページや次のページといったようにページングするものを
よく見かけます。


> あるいはリンクをクリックした時にある変数をPHPに渡すことによって、希望する順位のデータを表示させるのか

一般的にはこちらの方法になると思います。
ページングされているページではGETの値としてページ数や
レコードのインデックスを渡してやるものが多いです。

例えばこちらのBBSでは
/php/bbs/index.php?mode=tree&page=1
という風になっていますね。
これはURLのパラメータ(GET)に「page」という変数を持たせて、
この値により表示すべきページ数を取得し、PHPで該当データを表示するプログラムを組んでいます。


該当ページのデータは該当ページ以前の不要なデータを
スキップすることで取得します。

例)
<?php
/*********
* 初期化
*/
$page = 1; // ページ数
$row = 10; //表示限度件数
$count = 0; // 表示した件数
$data = array(...); // データ

/********
* ページ数の取得
*/
if(isset($_GET['page'])) $page = (int)$_GET['page'];

/********
* データの表示
*/
for($i = 0; $i < count($data); $i++) {
// 該当ページ以前のデータをスキップする
if($row * ($page - 1)) continue;

/* $data[$i]を表示 */
count++;

// 表示件数が表示限度件数に達したとき
if($count == $row) break;
}
?>


もしくは次のような方法もあります。
こちらではスキップ処理をするのではなく、該当ページの先頭インデックスの
ポインタを指定し、そこから表示限度件数まで表示したり、
データが存在しなければ表示を終わる
といったことをしています。

処理の速さでいうと上記の例のようにスキップをする手間が省けた分こちらの方が速いと思います。
  // 表示するデータの先頭インデックス
// ※配列の添え字が0から始まる場合
//  もし添え字が1から始まる場合は+1する必要がある
$idx = $row * ($page - 1);

/********
* データの表示
*/
// データが存在するか、もしくは $row 件表示されたか
// ※$count++ は比較をした後で+1されます
while((isset($data[$idx])) || ($count++ == $row)) {
/* $data[$idx]を表示 */
idx++;
}
Parent: 2928  reply: 2932 2934 返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 923 件中 277 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑