Подтвердить что ты не робот

Вычисление смещения позиции для разбивки на страницы

это кажется очень простой математикой, но почему-то мой мозг не может думать...

Я пытаюсь реализовать разбиение на страницы и вам нужно будет вычислить смещение элемента для использования в ограничении моего набора результатов. У меня возникают проблемы с вычислением индекса, который должен иметь первый элемент страницы.

например.

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, но это должно быть независимым от языка

задайтесь вопросом, должно ли это быть на сайте обмена математическим текстом

4b9b3361

Ответ 1

Используйте offset = (page - 1) * itemsPerPage + 1.

Ответ 2

Честно, зависит. Я не человек PHP, но я поставил оба там. Если вы потянете свои записи в какую-то форму коллекции (список, массив и т.д.), То ваша формула должна быть:

offset = (page - 1) * itemsPerPage

Это потому, что большинство (опять же, я не являюсь персонажем PHP), а списки используют 0 для своего первого элемента. Если они не используют 0 для своего первого элемента и/или вы вытаскиваете из таблицы или что-то еще, где идентификаторы начинаются с 1, то это должно быть:

offset = (page - 1) * itemsPerPage + 1

Я надеюсь, что это ясно и помогает.

Ответ 3

  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'

Ответ 4

Использование JS в качестве примера для пользователей прогрессивного веб-приложения...

В массивах JS есть метод прототипа .slice(start, end) обзор здесь он принимает начальный индекс и конечный индекс в качестве аргументов.

Я нашел самый простой способ подсчитать оба индекса следующим образом:

Начальный индекс

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

Конечный индекс

var end = parseInt(selectedPage * resultsPerPage);

Исполнение

var myPaginatedArray.slice(start, end);

Ответ 5

используйте этот

$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;
}

Ответ 6

Я сталкивался с этим раньше в 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>

У меня всегда под рукой currentPage в результате нажатия на кнопки Prev и Next, но инициализируется 1, itemsPerPage как настройки приложения и totalItemsDownloaded является подсчет общего количества элементов сообщенных вызов WebAPI.

Я надеюсь, что это помогает

Ответ 7

Я думаю, что это идеально и охватывает все сценарии.

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

Ответ 8

(размер страницы * размер страницы) -pagelimit +1