Приносим извинения, если это неправильный сайт для этой проблемы, так как это связано скорее с математикой, чем с программированием.
Я пытаюсь написать серию из 7 ссылок на страницы в стиле Google. По существу, это будет 7 чисел, s ( s + 6), где s – мое начальное значение. У меня возникли проблемы с вычислением начального значения, учитывая ограниченный объем информации.
Заранее, я знаю максимальное значение в серии, это переменная, но она всегда больше 7. В моих попытках написания формул я вызывал это значение g , поэтому g > 7.
Я также знаю номер страницы, которую выбрал пользователь. Я назвал это значение p
Так, например, если g было 8, мне нужно было бы генерировать эти ряды чисел, где полужирное число равно p :
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
2 3 4 5 6 7 8
2 3 4 5 6 7 8
2 3 4 5 6 7 8
2 3 4 5 6 7 8
Пока я могу определить начальное значение, используя имеющуюся информацию, все остальное встает на свои места. Может ли кто-нибудь посоветовать, как я буду рассчитывать свою начальную ценность, используя имеющуюся информацию? Если это актуально, я буду писать эту формулу в PHP.
Спасибо заранее за любые данные.
Это всего лишь код для тестирования.
<? $g=16; for($p=1;$p<17;$p++){ $start = $g-$p > 3 ? ($p-4<1?1:($p-4)) : $g-6; echo "$p :: "; for($i=$start;$i<$start+7;$i++){ echo $i . " "; } echo "<br>"; } ?>
Итак, ваша стартовая страница определяется (то, что вам действительно нужно):
$start = $g-$p > 3 ? ($p-4<1?1:($p-4)) : $g-6;
Выход (Моделирование для g = 16 и p от 1 до 16) ::
p :: номера страниц
1 :: 1 2 3 4 5 6 7 2 :: 1 2 3 4 5 6 7 3 :: 1 2 3 4 5 6 7 4 :: 1 2 3 4 5 6 7 5 :: 1 2 3 4 5 6 7 6 :: 2 3 4 5 6 7 8 7 :: 3 4 5 6 7 8 9 8 :: 4 5 6 7 8 9 10 9 :: 5 6 7 8 9 10 11 10 :: 6 7 8 9 10 11 12 11 :: 7 8 9 10 11 12 13 12 :: 8 9 10 11 12 13 14 13 :: 10 11 12 13 14 15 16 14 :: 10 11 12 13 14 15 16 15 :: 10 11 12 13 14 15 16 16 :: 10 11 12 13 14 15 16
И моделирование для g = 8, p от 1 до 8
1 :: 1 2 3 4 5 6 7 2 :: 1 2 3 4 5 6 7 3 :: 1 2 3 4 5 6 7 4 :: 1 2 3 4 5 6 7 5 :: 2 3 4 5 6 7 8 6 :: 2 3 4 5 6 7 8 7 :: 2 3 4 5 6 7 8 8 :: 2 3 4 5 6 7 8
Также проверьте Zend_Paginator , строит именно то, что вам нужно.
Это рецензируется как разбиение на страницы и может быть выполнено путем выполнения следующих действий:
Вот код, который я написал для разбивки на страницы в одном из моих проектов, это в виде класса, хотя я не уверен в вашем уровне мастерства, но предоставит вам помощь в Math:
Хотя мой класс может казаться сложным, поскольку он используется для разбивки на страницы, например
<<< 1 2 3 … 10 11 12 … 19 20 21 >>>
используя прилагательные, а что нет.
также выпишите следующие ссылки:
Работайте назад. Вы знаете конечный номер, поэтому вместо выполнения s++
сделайте g--
в цикле для вывода чисел. В этом процессе вы можете проверить, есть ли g == p
и если да, добавьте свой стиль к нему.
В зависимости от вашего конкретного кода вам, возможно, придется сделать два цикла, один для получения массива чисел, а один для вывода их в правильном порядке, но это довольно тривиально. Если вам действительно нужно / нужно придерживаться одного цикла, вы можете найти s
с некоторой простой математикой: s = g - 6
, тогда вы можете работать оттуда в цикле, который увеличивает s ( s++
).