Разбиение массива на страницы создает пустую дополнительную страницу

#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 символа.. Это происходит.