2012-01-12 88 views
1

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

欢迎,并形成良好的问题!为了帮助您,我需要将代码添加到页面的代码。他们就是关键! :) – davogotland 2012-01-12 01:50:16

+0

无论你点击什么,都必须传入一个“页码”,以便将代码用作起点。然后'$ var1 = $ _GET ['start']'和'$ var2 = $ var1 + 5' – 2012-01-12 01:50:42

+0

也是,这功课? – davogotland 2012-01-12 02:07:55

回答

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); 
} 
+0

我会说这个代码对于一个完整的初学者来说有点复杂。乍一看,三元运算符和printf都不是特别清楚。创造性地使用array_slice,但是当我们知道不会有关联数组时,是否有理由使用它而不是for循环?还是仅仅是为了防弹? – Lobo 2012-01-12 02:47:59

+1

这两件事很容易查找和学习。我认为没有必要对任何人的这种东西轻松。 :)我甚至会链接到文档:http://www.php.net/printf和http://www.php.net/manual/en/language.operators.comparison.php#language.operators .comparison.ternary而'array_slice'只是一个很好的,简单的方法来做到这一点。 – deceze 2012-01-12 03:45:13

+0

非常感谢您的帮助。我可以按照代码看看发生了什么。我不完全理解它,但我肯定会研究它,所以我可以从中学习。我已经能够编辑它来满足我的需求,所以我很高兴。再次非常感谢你。 – 2012-01-12 04:50:19

0

首先你需要设置$ VAR1以及基于用户点击什么$ VAR2(或者,如果大公还没有任何地方点击)如

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

有了这个,你的代码将从你的url中读取一个值,比如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的绝佳页面)。

+0

www.w3schools.com是我现在了解到的一点点。我也会检查出php.net。非常感谢 – 2012-01-12 04:52:34

1

这里有一些说明,旨在使你有趣的学习和解决你的难题!首先让我在你的代码中指出一些不必要的东西:)来打印所需的索引,而不必执行内部循环。你可以只引用索引数组中:

$stage_item[4] 

这将使你的循环是这样的:

for($list=$var1; $list<$var2; $list++) 
{ 
    print("{$stage_item[$list]}<br />"); 
} 

注意花括号!他们是需要的,因为表达式现在有点复杂,并且php需要帮助保持分离。

有关递增

你的页面调用之间发送的笔记和信息。我的意思是,你必须以某种方式使页面知道上次被调用的内容。我们将通过使用url参数来做到这一点。

你看,你可以从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> 

现在棘手的问题..你怎么了知道要在网址中放置什么数字?为了高举,他们比你已经拥有的要小。对于向下箭头,它们是更大的。

请确保您输入的检查停止索引太小(小于0)或太大(大于15我猜)。并且还要检查开始和结束是否被设置。如果没有,给他们初始值。

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

and end for end($ var2)。然后计算相邻页面的新变量。

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

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

+0

对于耐心的耐心解释。 :) – deceze 2012-01-12 03:48:14

+0

我得到它与其他答案之一,但我会通过你的答案,所以我可以学习一种替代方法。我越学越好。非常感谢你 – 2012-01-12 04:58:06