У меня есть массив значений, которые я разбил на страницы с помощью простой функции. Все работает нормально, за исключением одной небольшой ошибки, которую я не могу решить.
Если вы запустите приведенный ниже код, вы получите массив от 1 до 18, распечатанный на 4 страницах. Переменная $per_page
определяет, сколько значений показано на странице. В нашем случае должно иметь 4 страницы (18/5 = 3,6, поэтому первые три страницы имеют 5 значений каждая, а последняя четвертая страница имеет оставшиеся 3 - или «0,6» - значения) .
Ошибка состоит в том, что страница 1 имеет значения от 1 до 5, страница 2 - от 5 до 9, страница 3 - от 10 до 14, а страница 4 - от 15 до 18. По какой-то причине обе страницы одна и две получают значение 5, которое создает одно дополнительное значение для разбиения на страницы. Дальнейшее недоумение вызывает то, почему это происходит только с конечным значением на первой странице, но не на последующих страницах.
Можете ли вы увидеть, как именно я создаю дополнительное значение 5 для разбивки на страницы и как я можно это убрать?
<?php
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18);
// PAGINATION FUNCTION
function paginateArray($array, $from, $per_page) {
$i = 0; $page = 0;
foreach ($array as $key => $value) {
$page++; if ($from <= $page && $i < $per_page) { $i++; yield $key => $value; }
}
}
$per_page = 5; // HOW MANY VALUES TO SHOW PER PAGE
$num_of_pages = count($array) / $per_page; // TOTAL NUMBER OF PAGES
$from = (int)(isset($_GET['from']) ? $_GET['from'] : 0); // GET USER NAVIGATION INPUT
unset($_GET['from']);
$content = ""; // DEFINE PAGE CONTENT
// APPEND PAGINATED ARRAY TO CONTENT
foreach (paginateArray($array, $from * $per_page, $per_page) as $array_item) {
$content .= "$array_item<br>";
}
// PAGINATION NAVIGATION NUMBERS AND ARROWS
if ($from >= 1) { $content .= "<a href=?from=".($from - 1)."> < </a> | "; } else { $content .= "< | "; }
for ($i = 0; $i <= floor(($num_of_pages)); $i++) { if ($from !== $i) { $content .= "<a href=?from=$i>".($i + 1)."</a> | "; } else { $content .= "".($i +1)." | "; } }
if ($from <= ($num_of_pages - 1)) { $content .= "<a href=?from=".($from + 1)."> > </a>"; } else { $content .= ">"; }
print $content; // PRINT CONTENT
?>