这似乎是非常简单的数学但不知何故,我的大脑不能想...
我正在尝试实现分页,并且需要计算项目偏移量以用于限制我的结果集.我在计算页面的第一项应具有的索引时遇到问题.
例如.
with 1 page having 10 items
page 1 will have items 1 - 10
page 2 ............... 11 - 20
page 3 ............... 21 - 30
Run Code Online (Sandbox Code Playgroud)
我想到了
offset = page * itemsPerPage + 1
Run Code Online (Sandbox Code Playgroud)
但是第1页不会出现这种情况.必须有一个公式吗?我正在使用PHP/Zend_Paginator/Doctrine2,但这应该是语言无关的
想知道这是否应该在数学堆栈交换网站中
Gum*_*mbo 94
使用offset = (page - 1) * itemsPerPage + 1.
Xst*_*ity 34
老实说,取决于.我不是PHP的人,但我会把它们都放在那里.如果您将记录拉入某种形式的集合(列表,数组等),那么您的公式应该是:
offset = (page - 1) * itemsPerPage
Run Code Online (Sandbox Code Playgroud)
这是因为大多数(同样,我不是PHP人员)数组和列表使用0作为他们的第一个元素.如果他们不使用0作为他们的第一个元素和/或你从一个表或其他ID从1开始的东西,那么它应该是:
offset = (page - 1) * itemsPerPage + 1
Run Code Online (Sandbox Code Playgroud)
我希望这是明确和有帮助的.
myn*_*hno 11
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'
Run Code Online (Sandbox Code Playgroud)
我认为这个非常完美,涵盖了所有场景。
$offset = ($pageLimit * $page) - $pageLimit;
Run Code Online (Sandbox Code Playgroud)
以 JS 为例,对于渐进式 Web 应用程序的人......
JS 数组在.slice(start, end) 此处具有原型方法概述,它将开始索引和结束索引作为参数。
我发现计算两个索引的最简单方法如下;
开始索引
var start = parseInt((selectedPage - 1) * resultsPerPage);
Run Code Online (Sandbox Code Playgroud)
结束索引
var end = parseInt(selectedPage * resultsPerPage);
Run Code Online (Sandbox Code Playgroud)
执行
var myPaginatedArray.slice(start, end);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67329 次 |
| 最近记录: |