我希望做的是在加载页面时从数组中显示前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>
由于
答案 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>