#php #arrays #pagination
#php #массивы #разбиение на страницы
Вопрос:
У меня есть массив файлов в каталоге. Я хочу ограничить их определенным числом на странице. Я установил для него значение 5 в целях тестирования. Это создает дополнительную страницу без выходных данных на ней. Я не могу понять, почему он создает дополнительную страницу. У кого-нибудь есть идеи?
<?php
$offset = '5';
$dir = 'posts';
$files1 = array_diff(scandir($dir), array(
'..',
'.'
));
if (isset($_GET['bpage'])) {
$bpage = $_GET['bpage'];
} else {
$bpage = 1;
}
$count = count($files1);
if ($bpage < 1) {
$bpage = 1;
}
$pagearray = array_chunk($files1, $offset);
$pagearray = $pagearray[$bpage];
foreach ($pagearray as $item) {
echo $item . '<br />';
}
$startResults = ($bpage - 1) * $offset;
$totalPages = ceil($count / $offset);
echo '<div class="pagination pagination-centered"><ul>';
echo '<li><a href="?bpage=1">First</a></li>';
for ($i = 1; $i <= $totalPages; $i ) {
if ($i == $bpage)
echo '<li class="active"><a href="#">' . $i . '</a></li>';
else
echo '<li><a href="?bpage=' . $i . '">' . $i . '</a></li>';
}
echo '<li><a href="?bpage=' . $totalPages . '">Last</a></li>';
echo '</ul></div>';
?>
Ответ №1:
Вам следует изменить строку:
$pagearray = $pagearray[$bpage];
в:
$pagearray = $pagearray[$bpage-1];
потому что в PHP индексы в массиве начинаются с 0, а не с 1.
В вашем коде для страницы 1 вы отображали данные с индексом 1, и это фактически был 2-й элемент массива. Таким образом, на последней странице у вас не было никаких элементов, потому что в индексе не было данных $totalPages
(последний был на $totalPages-1
)
Комментарии:
1. Я чувствую себя довольно глупо.. Я боролся с этим в течение часа и забыл 2 символа.. Это происходит.