php分页偏移,计算分页的项目偏移量

本文介绍如何在PHP/Zend_Paginator/Doctrine2中计算分页项目的偏移量,提供多种公式解释,包括适用于不同数据结构的索引计算方法,如0-based或1-based数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算分页的项目偏移量

这似乎很简单,但我的大脑无法思考...

我正在尝试实现分页,并且需要计算项偏移量以用于限制我的结果集。 我在计算页面的第一项应该具有的索引时遇到问题。

例如。

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,但这应该与语言无关

想知道这是否应该在数学堆栈交换站点中

Jiew Meng asked 2020-06-22T20:02:31Z

7个解决方案

93 votes

使用offset = (page - 1) * itemsPerPage + 1。

Gumbo answered 2020-06-22T20:02:45Z

34 votes

老实说。 我不是PHP人士,但是我会把两者都放在那里。 如果要将记录放入某种形式的集合(列表,数组等)中,则公式应为:

offset = (page - 1) * itemsPerPage

这是因为大多数(同样,我不是PHP人士)数组和列表的第一个元素都使用0。 如果他们的第一个元素不使用0,并且/或者您从ID开头为1的表或其他内容中提取数据,则应该为:

offset = (page - 1) * itemsPerPage + 1

我希望这很清楚,对您有所帮助。

XstreamINsanity answered 2020-06-22T20:03:14Z

11 votes

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'

mynameistechno answered 2020-06-22T20:03:30Z

4 votes

以JS为例,适合渐进式网络应用人员。

JS数组具有原型方法.slice(start, end),在此概述中,它以开始索引和结束索引作为参数。

我发现计算两个索引的最简单方法如下:

开始索引

var start = parseInt((selectedPage - 1) * resultsPerPage);

结束索引

var end = parseInt(selectedPage * resultsPerPage);

执行

var myPaginatedArray.slice(start, end);

Mark Carpenter Jr answered 2020-06-22T20:04:12Z

1 votes

我认为这是完美的,涵盖了所有情况。

$offset = ($pageLimit * $page) - $pageLimit;

ManojP answered 2020-06-22T20:04:31Z

0 votes

用这个

$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 "".$i;

}

ايكيو المعلوماتية answered 2020-06-22T20:04:51Z

0 votes

我以前在Angular 4中已经遇到过这个问题,这是对模板的编辑,其中带有分页的列表变得更加简单:

Item {{(currentPage - 1) * itemsPerPage + (i + 1)}} of {{totalItemsDownloaded}}

{{item.name}}

单击“上一个”和“下一个”按钮后,我总是很方便currentPage,但将其初始化为1,将itemsPerPage作为应用程序设置,并且totalItemsDownloaded是WebAPI调用报告的总项目数。

希望对您有所帮助

Sparker73 answered 2020-06-22T20:05:20Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值