限制数组结果并在单击按钮时递增

时间:2012-01-12 01:45:29

标签: php

我希望做的是在加载页面时从数组中显示前5个项目(Stage1 - Stage5)。在侧面,我将有两个图像,一个箭头朝上,一个箭头朝下。如果单击向下箭头,则数组将递增以显示(Stage2 - Stage6)。再单击屏幕上显示的向下箭头(Stage3 - Stage7)。然后向上箭头执行相同但相反的方向。

使用下面的代码我可以手动将“1”添加到$ var1和$ var2或者在需要时减去1,保存并刷新浏览器以获得我想要的效果。我似乎无法弄清楚如何进行$ var1和$ var2的增量,然后在点击箭头图像时自动刷新页面。

我很新,所以我可以完全摆脱我所拥有的东西,但希望它至少有助于展示我想做的事情。

<?php

$stage_name=array
("Stage1","Stage2","Stage3","Stage4",
"Stage5","Stage6","Stage7","Stage8",
"Stage9","Stage10","Stage11","Stage12",
"Stage13","Stage14","Stage15","Stage16");

?>
<html>
<body>
<?php
$var1=0; $var2=5;
for($list=$var1; $list<$var2; $list++)
{
    foreach($stage_name as $stage_index => $stage_item)
    {
        if ($stage_index==$list)
            print("$stage_item<br />");
    }
}
?>
</body>
</html>

由于

3 个答案:

答案 0 :(得分:1)

这里有一些说明,旨在让你学习和解决你的谜题很有趣!

首先,让我在你的代码中指出一些不必要的东西:)打印所需的索引,你不必做内循环。你可以只引用数组中的索引:

$stage_item[4]

这将使你的循环看起来像这样:

for($list=$var1; $list<$var2; $list++)
{
    print("{$stage_item[$list]}<br />");
}
注意花括号!因为表达现在有点复杂,所以需要它们,php需要帮助保持碎片分开。

关于增量

您必须在页面调用之间发送备注和消息。我的意思是,你必须以某种方式让页面知道上次调用时发生的事情。我们将通过使用url参数来完成此任务。

你看,你可以从网址接收参数!在url中,这些参数被表示为键/值对。

start=2
end=7

它们被&符号分隔

start=2&end=7

键/值对在问号

之后开始
mysite.com/url.php?start=2&end=7

这里我们已经发送了开始和结束(这些都是由你的例子中的var1和var2组成)到页面url.php

然后使用魔术变量$_GET获取这些内容。它是一个数组,它神奇地拥有网址中键的键。所以要开始,你做

$var1 = $_GET['start'];

注意引号。这些都存在,因为在这种情况下键是字符串,而不是前面的例子,其中键是数字(也就是整数)。现在,我们如何才能从我们的页面激活这些网址?好吧,你有图像吧? (并且不要在此处使用带有输入字段的表单,而是使用img标记)

<img src='arrowup.png' />

将其放入锚标记

<a href='the_same_page_youre_already_on.php?start=1&end=6'><img src="arrowup.png" /></a>

现在是棘手的部分..你怎么知道在网址中放置什么数字?对于uparrow,他们比你已经拥有的小一个。对于向下箭头,它们是一个更大的。

确保你输入的检查可以阻止索引太小(小于0)或太大(我猜想大于15)。并且,检查实际设置的开始和结束。如果没有,请给他们初始值。

if(isset($_GET['start'])) { //check if we actually got a value
    $var1 = $_GET['start'];
} else {
    $var1 = 0;
}

和end($ var2)相同。然后,计算相邻页面的新变量。

$next_start = $var1 + 1;
$next_end = $var2 + 1;
$previous_start = $var1 - 1;
$previous_end = $var - 1;

使用您的变量打印您需要打印的内容。打印箭头,但使用next_start / previous_end变量作为链接中不同参数的值。

答案 1 :(得分:0)

$stageNames = array("Stage1", "Stage2", "Stage3", "Stage4",
                    "Stage5", "Stage6", "Stage7", "Stage8",
                    "Stage9", "Stage10", "Stage11", "Stage12",
                    "Stage13", "Stage14", "Stage15", "Stage16");

$offset  = isset($_GET['offset']) ? $_GET['offset'] : 0;
$perPage = 5;

if ($offset > 0) {
    printf('<a href="here.php?offset=%d">Up</a>', $offset - 1);
}

foreach (array_slice($stageNames, $offset, $perPage) as $stageName) {
    echo $stageName . '<br>';
}

if ($offset + $perPage < count($stageNames)) {
    printf('<a href="here.php?offset=%d">Down</a>', $offset + 1);
}

答案 2 :(得分:0)

首先你需要根据用户点击的内容(或者如果没有点击任何地方)设置$ var1和$ var2,例如

if($_GET['start'])}
    $var1 = $_GET['start']
} else {
    $var1 = 0;
}
$var2 = $var1+5;

使用此代码,您的代码将从您的网址读取一个值,例如yourdomain.com/display.php?start=1(这会将$ var1设置为1),这就是您需要获取当前代码以输出纠正5个要素。但是你的代码效率非常低。使用值0-> 5,将发生这种情况:

For loop starts with $list = 0:
    Foreach goes trough each of the elements in the array
        First element in the Foreach loop maches $stage_index==$list
        Second element in the Foreach loop doesnt mach $stage_index==$list
        ....
        16:th element in the foreach loop doesnt mach $stage_index==$list
    Foreach loop ends
For loop increments and continues with $list = 1
    Foreach goes trough each of the elements in the array
        First element in the Foreach loop doesnt mach $stage_index==$list
        Second element in the foreach loop matches $stage_index==$list
        Third element in the Foreach loop doesnt mach $stage_index==$list
        ....
        16:th element in the foreach loop doesnt mach $stage_index==$list
    Foreach loop ends
For loop increments and continues with $list = 2
....
For loop reaches $list = $var2 and the loop ends

使用此构造,您可以循环数组80次以回显5个值(因此75次没有任何好处)。 解决方案非常简单,但我会让你自己弄清楚,因为你会学到更多。解决这个问题所需的一切都可以在php手册(http://php.net/)和教程网站上找到,例如http://www.w3schools.com/(这实际上是开始学习php和html的好页面)。 / p>