#php
#php
Вопрос:
Я создаю систему разбивки на страницы, которая будет разбивать статьи на моем веб-сайте на страницы.
ЦЕЛЬ: Разбить на страницы массив файлов (7 элементов / страница)
Я столкнулся с проблемой, которую я устранял более 5 часов… Вот логическая сторона вещей, поправьте меня, если я ошибаюсь.
Хорошо. Итак, у меня есть 26 фиктивных статей (алфавит) внутри папки. Давайте найдем количество файлов в нем… Я назову результат: переменная X.
Чтобы получить количество страниц разбивки на страницы, я делаю следующее: X делится на 7. Очевидно, что это может выводить значения с плавающей запятой вместо целых чисел.. Итак, я буду округлять результат с помощью «cint», который всегда будет округляться в большую сторону. Давайте назовем количество страниц «Z».
Итак, я и мой новый друг Z хотим указать какую-то функцию для извлечения этих статей. Я составил следующие уравнения, чтобы найти начало и конец статей, которые я хочу показать.
$start = Z * 7 — 7
$end = Z * 7
Эти уравнения генерируют
от 0 до 7 для страницы 1. Ожидаемый результат (не реальность):
a, b, c, d, e, f, g.
с 8 по 15 для страницы 2. Ожидаемый результат (не реальность).
h, i, j, k, l, m, n.
И так далее…
Итак, используя мой превосходный мозг (sike) Мне удалось сгенерировать следующий вывод для страницы 1:
CHOOSE PAGE: 1 2 3 4
Youre at page 1
Theres 26 articles
Showing 0 to 7
a - Thursday, 4th of April 2019 @ 20:54:02
b - Thursday, 4th of April 2019 @ 20:54:04
c - Thursday, 4th of April 2019 @ 20:54:08
d - Thursday, 4th of April 2019 @ 20:54:10
e - Thursday, 4th of April 2019 @ 20:54:13
f - Thursday, 4th of April 2019 @ 20:54:15
g - Thursday, 4th of April 2019 @ 20:54:18
Но, как ни странно, когда я перехожу на страницу 2, я получаю … этот беспорядок.
CHOOSE PAGE: 1 2 3 4
Youre at page 2
Theres 26 articles
Showing 7 to 14
h - Thursday, 4th of April 2019 @ 20:54:22
i - Thursday, 4th of April 2019 @ 20:54:24
j - Thursday, 4th of April 2019 @ 20:54:28
k - Thursday, 4th of April 2019 @ 20:54:31
l - Thursday, 4th of April 2019 @ 20:54:34
m - Thursday, 4th of April 2019 @ 20:54:37
n - Thursday, 4th of April 2019 @ 20:54:39
o - Thursday, 4th of April 2019 @ 20:54:42
p - Thursday, 4th of April 2019 @ 20:54:44
q - Thursday, 4th of April 2019 @ 20:55:47
r - Thursday, 4th of April 2019 @ 20:55:49
s - Thursday, 4th of April 2019 @ 20:55:51
t - Thursday, 4th of April 2019 @ 20:55:53
u - Thursday, 4th of April 2019 @ 20:55:55
… И когда я перехожу на страницу 3, появляются некоторые результаты со страницы 2!
CHOOSE PAGE: 1 2 3 4
Youre at page 3
Theres 26 articles
Showing 14 to 21
o - Thursday, 4th of April 2019 @ 20:54:42
p - Thursday, 4th of April 2019 @ 20:54:44
q - Thursday, 4th of April 2019 @ 20:55:47
r - Thursday, 4th of April 2019 @ 20:55:49
s - Thursday, 4th of April 2019 @ 20:55:51
t - Thursday, 4th of April 2019 @ 20:55:53
u - Thursday, 4th of April 2019 @ 20:55:55
v - Thursday, 4th of April 2019 @ 20:55:57
w - Thursday, 4th of April 2019 @ 20:56:00
x - Thursday, 4th of April 2019 @ 20:56:03
y - Thursday, 4th of April 2019 @ 20:56:05
z - Thursday, 4th of April 2019 @ 20:56:07
Наконец, я получаю последнюю страницу (страница 4) с окончательным последним результатом со страницы 3.
Вот код…
<?php
$page = strip_tags($_GET['p']);
if(empty($page)){$page = "1";}
$post_array = glob("post/*");
$post_count = count($post_array);
$page_num = ceil($post_count / 7);
echo "CHOOSE PAGE: ";
for($i = 1; $i<$page_num 1; $i ){
echo "<a href="?p={$i}">{$i}</a> ";
}
if($page>$page_num){
echo "<br>error";
}
elseif(!is_numeric($page)) {
echo "<br>error";
}
else {echo "<br>Youre at page {$page}<br>";
echo "Theres {$post_count} articles<br><br>";
$start = $page * 7 - 7;
$end = $page * 7;
$post_array_sliced = array_slice($post_array, $start, $end);
echo "Showing {$start} to {$end}<br><br>";
foreach ($post_array_sliced as $post){
$post_name = pathinfo($post)['filename'];
$post_date = filemtime($post);
echo "{$post_name} - ".date('l, jS of F Y @ H:i:s', $post_date)."<br>";
}
}
?>
Я думаю, что эта проблема вызвана моими ужасными логическими навыками. Кто-нибудь может меня поправить, указать на документы?
Большое спасибо за ваше время 🙂
Комментарии:
1.
array_slice
ожидает длину .2. @tkausl Я не совсем понимаю, разве array_slice ($ array, 8, 15) в основном не говорит: «начинайте с 8 и заканчивайте на 15»?
3. Если страниц 7, то первая страница должна быть 0-6, вторая страница 7-13.
Ответ №1:
array_slice ожидает не первый и последний индексы, а первый индекс и длину (количество элементов для извлечения). Итак, вы должны поместить:
array_slice($post_array, $start, 7);