Разбивка на страницы: логика?

#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);