2012-01-12 54 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