2012-01-12 11 views
1

私は、ページが読み込まれたときに配列から最初の5つのアイテム(Stage1〜Stage5)を表示することを望んでいます。側面には、上向きに1つの矢印、下向きに1つの2つの画像が表示されます。下向きの矢印をクリックすると、配列が増加して(Stage2 - Stage6)表示されます。画面の下矢印をもう一度クリックすると(Stage3- Stage7)表示されます。次に、上向きの矢印は同じですが反対方向です。ボタンをクリックすると配列の結果とインクリメントが制限されます

以下のコードでは、$ var1と$ var2に "1"を手動で追加するか、必要なときに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

+0

あなたがクリックしているものは、コードを開始点として使用するためには「ページ番号」を渡す必要があります。次に '$ var1 = $ _GET ['start']'と '$ var2 = $ var1 + 5' –

+0

もこの宿題ですか? – davogotland

答えて

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-loopの代わりにそれを使用する理由はありますか?それとも、弾丸にするだけですか? – Lobo

+1

これらの2つのことは、ルックアップと学習が本当に簡単です。私は誰にもこの種のもので簡単に行く必要はないと思う。私はドキュメントへのリンクを投げます:http://www.php.net/printf and http://www.php.net/manual/en/language.operators.comparison.php#language.operators .comparison.ternaryそして 'array_slice'は、これを行うための素敵な、簡単な方法です。 – deceze

+0

ありがとうございました。私はコードに従って何が起こっているか見ることができます。私はそれを完全に理解していませんが、私はそれを学ぶことができるように私は確かにそれを研究します。私はそれを私のニーズに合わせて編集することができたので、私は満足しています。もう一度皆さんに非常に感謝します。 –

0

最初のオフあなたは$ VAR1、ユーザーがクリックした内容に基づいて$ VAR2を設定する必要があります(または持ち運びにくいが、どこにもクリックされていない場合)、このような

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

として

このコードでは、yourdomain.com/display.php?start=1などのURLから値を読み込みます(これは$ var1を1に設定します)。これは、現在のコードが正しいものを出力するために必要なものです5要素。しかし、あなたのコードは非常に非効率的です。値0-> 5でこの現象が発生します:あなたのループは5つの値をエコーするために、アレイ80回の谷この構築物で

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 

を(その75倍はいかなる利益なしです)。 解決策はかなりシンプルですが、それ以上のことを学ぶので、あなた自身で解決することができます。この問題を解決するために必要なものはすべて、PHPマニュアル(http://php.net/)とhttp://www.w3schools.com/のようなチュートリアルサイト(phpとhtmlの学習を始めるには素晴らしいページです)でオンラインで見つけることができます。

+0

www.w3schools.comは私が今知っている少し知ったところです。私もphp.netをチェックアウトします。大変ありがとうございます。 –

1

ここでは、あなたがパズルを学び、解決するための楽しい方法を説明しています!

最初に、不要なコードを指摘しておきましょう:)希望するインデックスを印刷するには、内側のループを行う必要はありません。あなたは自分の配列内のインデックスを参照することができます。

$stage_item[4] 

あなたのループはこのように見えるようになること:

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

ノート中括弧を!表現は今より少し複雑で、PHPは断片を分けておく必要があるので、それらは必要です。ページの呼び出しの間でメモやメッセージを送信する必要がインクリメント

について

。つまり、最後に呼び出されたときに何が起こったかをページに何らかの形で認識させる必要があります。 urlパラメータを使用してこれを行います。

あなたが見ると、あなたはURLからパラメータを受け取ることができます! urlでは、これらのパラメータはキーと値のペアとして作成されます。それらは、キー/値のペアは、疑問符ここ

mysite.com/url.php?start=2&end=7 

後、我々は(これらが作られ、開始と終了を送信した開始アンパサンド

start=2&end=7 

で区切られてい

start=2 
end=7 

、あなたの例のvar1とvar2のように)ページurl.php

これらはmagic変数$_GETで取得されます。それは配列なので、あなたのキーのキーが魔法のようにURLにあります。開始するには、

$var1 = $_GET['start']; 

引用符に注意してください。これは、キーが数字(別名整数)だった以前の例とは対照的に、この場合のキーが文字列であるためです。今、このようなURLを私たちのページからどのように活性化させることができますか?まあ、画像はありますよね?

<img src='arrowup.png' /> 

(と代わりにIMGタグを使用し、ここで入力フィールドを持つフォームを使用していない)だけであなたがどのように..トリッキーな部分は今ではアンカータグで

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

を置きますURLにはどのような数字が入りますか?アップローのために、彼らはあなたがすでに持っているものよりも小さいものです。下向き矢印の場合は1つ大きい。

インデックスが小さすぎる(0より小さい)か、大きすぎない(15よりも大きいと思われる)チェックを入れてください。また、開始と終了が実際に設定されていることを確認してください。そうでない場合は、初期値を与えます。

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

エンド($ var2)と同じです。次に、隣接するページの新しい変数を計算します。

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

あなたは印刷する必要があるものを印刷するには、あなたの変数を使用しています。矢印を印刷しますが、next_start/previous_end変数をリンク内のさまざまなパラメータの値として使用します。

+0

+1すごく患者の説明をありがとうございます。 :) – deceze

+0

私は他の答えの1つと一緒に働くことになったが、私はあなたの答えにも行くので、私は別の方法を学ぶことができます。私はより多くを学ぶことができます。どうもありがとうございました –

関連する問題