Формула PHP для серии чисел (проблема Мати) - PullRequest
1 голос
/ 30 июня 2011

Приношу свои извинения, если это неправильный сайт для этой проблемы, так как он больше связан с математикой, чем с программированием.

Я пытаюсь написать серию 7-страничных ссылок в стиле Google-esque.По сути, это будет 7 цифр, с до ( с + 6), где с моя начальная стоимость.У меня проблемы с вычислением моего начального значения, учитывая ограниченный объем информации.

Заранее я знаю максимальное значение в ряду, оно переменное, но оно всегда больше 7. В моей формулепри попытках записи я назвал это значение г , поэтому г > 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 34 5 6 7 8

2 3 4 5 6 7 8

Пока я могу определить начальное значение, используя доступную информацию,все остальное становится на свои места.Кто-нибудь может посоветовать, как мне рассчитать начальную стоимость, используя доступную информацию?Если это уместно, я напишу эту формулу на PHP.

Заранее благодарен за любой вклад.

Ответы [ 4 ]

1 голос
/ 30 июня 2011

Это просто код симуляции для тестирования.

<?
$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, р от 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
1 голос
/ 30 июня 2011

Это называется пагинацией и может быть выполнено следующим образом:

  • Во-первых, вам понадобится набор результатов, обычно из базы данных или где-либо еще.
  • После применения каких-либо фильтров к результирующему набору у вас должен быть другой результирующий набор
  • . Вам потребуется количество отфильтрованных результатов.
  • . Вам понадобится переменная, для которой установлено ограничение "на страницу".
  • переменная, содержащая текущую страницу
  • переменная, в которой указано, сколько ссылок должно быть по обе стороны от активной ссылки

Вот код, который я написал длянумерация страниц в одном из моих проектов, это в форме класса, хотя я не уверен в вашем уровне мастерства, но предоставлю вам помощь по математике:

Хотя мой класс может показаться сложным, так как он используется для нумерации страниц, например

<<< 1 2 3 ... 10 <strong>11 12 ... 19 20 21>>>

с использованием прилагательных, а что нет.

aТакже выведите следующие ссылки:

1 голос
/ 30 июня 2011

Также проверьте Zend_Paginator , это сборка именно для того, что вам нужно.

0 голосов
/ 30 июня 2011

Работа в обратном направлении. Вы знаете конечный номер, поэтому вместо s++ выполните g-- в цикле для вывода чисел. В процессе вы можете проверить, если g == p, и если да, добавьте свой стиль к нему.

В зависимости от вашего конкретного кода, вам может потребоваться выполнить два цикла, один для получения массива чисел и один для вывода их в правильном порядке, но это довольно тривиально. Если вам действительно нужно / хотите придерживаться одного цикла, то вы можете найти s с простой математикой: s = g - 6, тогда вы можете работать оттуда в цикле, который увеличивает s (s++).

...