计算项目的分页
问题描述:
抵消这似乎是很简单的数学,但不知何故,我的大脑不能相信......计算项目的分页
我想实现分页和需要计算该项目抵消在限制我的结果集中使用。我在计算页面第一项应该具有的索引时遇到问题。
例如。
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的人,但我会把两者都放在那里。如果你拉你的记录在某种形式的集合(list,阵列等),然后你的公式应该是:
offset = (page - 1) * itemsPerPage
这是因为大多数(再次,我不是一个PHP的人)阵列和列表的第一个元素使用0。如果他们不为他们的第一个元素和/或你从一个表或别的东西,其中ID从1开始拉动使用0,那么就应该是:
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'
答
使用JS作为一个例子,渐进的Web应用程序的人...
JS数组中有原型法.slice(start, end)
overview here它需要开始索引和结束索引作为参数。
我发现计算两个索引的最简单方法如下;
开始指数
var start = parseInt((selectedPage - 1) * resultsPerPage);
末指数
var end = parseInt(selectedPage * resultsPerPage);
执行
var myPaginatedArray.slice(start, end);
答
使用这种
$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;
}
岂不是:偏移量=(页 - 1)* itemsPerPage 作为结果1号永远不会做出另外的说明? – 2010-08-19 10:56:04
嗨你是否意味着抵消=(page_number - 1)* itemsPerPage; 如果这样不会产生大于itemsPerPage数字的数字? – Jam 2013-02-07 20:59:32
我打算在考虑Jiew的例子的同时回答这个问题。他显然正在计算每个页面的第一个项目编号;所以firstItemForPage(1)=(1-1)·10 + 1 = 1,firstItemForPage(2)=(2-1)·10 + 1 = 11等等。 – Gumbo 2013-02-07 21:42:13