【问题标题】:PHP Formula For a Series of Numbers (Mathy Problem)一系列数字的 PHP 公式(数学问题)
【发布时间】:2011-06-30 17:22:02
【问题描述】:

如果这个问题的站点有误,我深表歉意,因为它与数学有关而不是编程。

我正在尝试以 Google 风格的方式编写一系列包含 7 个页面的链接。本质上,它将是 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 中编写此公式。

提前感谢您的任何意见。

【问题讨论】:

  • 我相信您正在寻找的术语是“分页”。
  • 谢谢!这可能有助于我在谷歌上搜索解决方案。

标签: php math formula


【解决方案1】:

这只是用于测试的模拟代码。

<?
$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

【讨论】:

    【解决方案2】:

    还要检查Zend_Paginator,它是否完全符合您的需要。

    【讨论】:

    • 我也感谢你。我会在以后的项目中记住这一点。
    【解决方案3】:

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

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

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

    虽然我的课程可能看起来很复杂,因为它用于分页,例如

    11 12 ... 19 20 21 >> >

    使用形容词等等。

    还可以查看以下链接:

    【讨论】:

    • 谢谢。我将在未来的项目中参考这些示例。 :)
    【解决方案4】:

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

    根据您的具体代码,您可能需要执行两次循环,一次获取数字数组,另一次以正确的顺序输出它们,但这非常简单。如果你真的需要/想要坚持一个循环,那么你可以通过一些简单的数学运算找到ss = g - 6,然后你可以从那里开始在一个递增 s (s++) 的循环中工作。

    【讨论】:

    • 谢谢你的回答,但要么我误解了你,要么我没有说清楚。我确实知道可能的最大页数,但我不知道该系列的结束编号。这将根据用户选择的页面“p”而改变。你是对的,因为我可以计算系列中的最后一个值(我们称之为“e”),并从中得到我的数字系列,但我不知道我怎么能提前知道这一点。我会遇到同样的困难,因为我会找到“s”,我的起始值。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多