これは非常に単純な数学のように思えますが、どういうわけか、私の脳は考えることができません...
ページネーションを実装しようとしていますが、結果セットの制限に使用するアイテムのオフセットを計算する必要があります。ページの最初のアイテムが持つべきインデックスの計算に問題があります。
例えば。
with 1 page having 10 items
page 1 will have items 1 - 10
page 2 ............... 11 - 20
page 3 ............... 21 - 30
と思った
offset = page * itemsPerPage + 1
しかし、これはページ1には当てはまりません。これには式が必要ですか? PHP/Zend_Paginator/Doctrine2を使用していますが、これは言語に依存しないはずです
これが数学スタック交換サイトにあるべきかどうか疑問に思う
offset = (page - 1) * itemsPerPage + 1
を使用します。
正直に依存しています。私はPHP personですが、両方ともそこに置きます。レコードを何らかの形式のコレクション(リスト、配列など)に引き込む場合、式は:
offset = (page - 1) * itemsPerPage
これは、ほとんどの(ここでも、私はPHP person)ではない)配列とリストが最初の要素に0を使用しているためです。 IDが1で始まるテーブルまたは他の何かからプルすると、次のようになります。
offset = (page - 1) * itemsPerPage + 1
それが明確で助けになることを願っています。
start = (page - 1) * itemsPerPage + 1
end = totalItems
if (itemsPerPage < totalItems) {
end = itemsPerPage * page
if (end > totalItems) {
end = totalItems;
}
}
// e.g. "21-30 of 193 items"
start + '-' + end + ' of ' + totalItems + ' items'
プログレッシブWebアプリのユーザー向けに、JSを例として使用しています...
JS配列には、プロトタイプメソッド.slice(start, end)
ここで概要 があり、引数として開始インデックスと終了インデックスを取ります。
両方のインデックスを計算する最も簡単な方法は次のとおりです。
開始インデックス
var start = parseInt((selectedPage - 1) * resultsPerPage);
終了インデックス
var end = parseInt(selectedPage * resultsPerPage);
実行
var myPaginatedArray.slice(start, end);
Angular 4でこれに直面したことがあります。これは、ページ分割がより簡単になったリストを持つテンプレートの一部の編集です。
<div *ngFor="let item of pagedItems; let i = index">
<div class="item-caption">
Item {{(currentPage - 1) * itemsPerPage + (i + 1)}} of {{totalItemsDownloaded}}
</div>
<div class="item-name">{{item.name}}</div>
</div>
Prev&Nextボタンをクリックした結果、常に便利ですcurrentPage
は1で初期化され、itemsPerPage
はApp設定として、totalItemsDownloaded
はWebAPIの合計アイテム数ですコールが報告されました。
私はそれが役立つことを願っています
これを使って
$row_page = 5; //items per page
if(isset($_GET['p'])){
$page_num = $_GET['p'];
} else {
$page_num = 0;
}
$offset = ( $page_num ) * $row_page;
$cn = 31;
$pg = (int)ceil($cn / $row_page);
for ($i = 1; $i <= $pg; $i++){
echo "<br/><a href='?p=$i'>".$i;
}
これは完璧で、すべてのシナリオをカバーすると思います。
$offset = ($pageLimit * $page) - $pageLimit;