计算分页的项目偏移量

Jie*_*eng 46 pagination

这似乎是非常简单的数学但不知何故,我的大脑不能想...

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

例如.

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.

  • 它应该不是:offset =(page - 1)*itemsPerPage结果编号1永远不会显示? (22认同)
  • ```$ offset =($ pageLimit*$ page) - $ pageLimit;```我已经使用了上面一年多了.你也可以尝试一下. (5认同)
  • 嗨,你的意思是offset =(page_number - 1)*itemsPerPage; 如果是这样,结果不会生成大于itemsPerPage数字的数字? (2认同)

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)

我希望这是明确和有帮助的.

  • “通常”每个人都以 0 作为起点,无论是 PHP、JavaScript 等。 (2认同)

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)


Man*_*ojP 6

我认为这个非常完美,涵盖了所有场景。

$offset = ($pageLimit * $page) - $pageLimit;
Run Code Online (Sandbox Code Playgroud)


Mar*_* Jr 5

以 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)