如果这是解决这个问题的错误网站,我很抱歉,因为它更多地与数学有关,而不是与编程有关。
我正试图以谷歌式的方式写一系列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
是否存在,如果存在,请将您的样式添加到其中。
根据您的特定代码,您可能需要执行两个循环,一个用于获取数字数组,另一个用于以正确的顺序输出它们,但这很简单。如果你真的需要/想坚持一个循环,那么你可以用一些简单的数学方法找到s
:s = g - 6
,然后你可以从那里开始计算一个递增s(s++
)的循环。