Ответ 1
Используйте offset = (page - 1) * itemsPerPage + 1
.
это кажется очень простой математикой, но почему-то мой мозг не может думать...
Я пытаюсь реализовать разбиение на страницы и вам нужно будет вычислить смещение элемента для использования в ограничении моего набора результатов. У меня возникают проблемы с вычислением индекса, который должен иметь первый элемент страницы.
например.
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, но я поставил оба там. Если вы потянете свои записи в какую-то форму коллекции (список, массив и т.д.), То ваша формула должна быть:
offset = (page - 1) * itemsPerPage
Это потому, что большинство (опять же, я не являюсь персонажем PHP), а списки используют 0 для своего первого элемента. Если они не используют 0 для своего первого элемента и/или вы вытаскиваете из таблицы или что-то еще, где идентификаторы начинаются с 1, то это должно быть:
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 в качестве примера для пользователей прогрессивного веб-приложения...
В массивах JS есть метод прототипа .slice(start, end)
обзор здесь он принимает начальный индекс и конечный индекс в качестве аргументов.
Я нашел самый простой способ подсчитать оба индекса следующим образом:
Начальный индекс
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;
}
Я сталкивался с этим раньше в 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.
Я надеюсь, что это помогает
Я думаю, что это идеально и охватывает все сценарии.
$offset = ($pageLimit * $page) - $pageLimit;
(размер страницы * размер страницы) -pagelimit +1