一系列数字的PHP公式(数学问题)


PHP Formula For a Series of Numbers (Mathy Problem)

如果这是解决这个问题的错误网站,我很抱歉,因为它更多地与数学有关,而不是与编程有关。

我正试图以谷歌式的方式写一系列7页的链接。从本质上讲,它将是7个数字,从s到(s+6),其中>s是我的起始值。由于信息量有限,我在计算起始值时遇到了问题。

事先,我知道序列中的最大值,这是可变的,但它总是大于7。在我的公式编写尝试中,我一直将此值称为g,因此g7。

我还知道用户选择的页码。我一直将此值称为p

因此,例如,如果g是8,我需要生成这些数字序列,其中粗体数字等于p

12 3 4 5 6 7

123 4 5 6 7

1 234 5 6 7

1 2 345 6 7

2 3 456 7 8

2 3 4 567 8

2 3 4 5 678

2 3 4 5 6 78

只要我能使用可用的信息来确定起始值,其他一切都会到位。有人能建议我如何利用现有信息计算我的起始值吗?如果它是相关的,我将用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,它正是根据您的需要构建的。

这被称为分页,可以通过执行以下操作来完成:

  • 首先,您需要一个结果集,通常来自数据库或任何地方
  • 将任何筛选器应用于结果集后,您应该会有另一个结果集
  • 您将需要筛选结果的计数
  • 您需要一个设置为"每页限制"的变量
  • 包含当前页面的变量
  • 一个变量,说明活动链接的两侧应该有多少个链接

以下是我在一个项目中为分页编写的一些代码,它是一个类的形式,尽管我不确定你的技能水平,但会为你提供数学方面的帮助:

  • https://github.com/AdminSpot/ASDDL/blob/master/system/libraries/pagination.php

尽管我的类可能看起来很复杂,因为它用于分页,如

<lt<1 2 3。。。101112。。。19 20 21>>>

使用形容词和什么不使用。

还列出了以下链接:

  • php分页计算解决方案

反向工作。您知道结束数字,所以不要执行s++,而是在循环中执行g--以输出数字。在此过程中,您可以检查g == p是否存在,如果存在,请将您的样式添加到其中。

根据您的特定代码,您可能需要执行两个循环,一个用于获取数字数组,另一个用于以正确的顺序输出它们,但这很简单。如果你真的需要/想坚持一个循环,那么你可以用一些简单的数学方法找到ss = g - 6,然后你可以从那里开始计算一个递增s(s++)的循环。