2012-01-12 3 views
1

내가 수행하고자하는 것은 페이지가로드 될 때 배열의 처음 5 개 항목 (Stage1 - Stage5)을 표시하는 것입니다. 측면에는 두 개의 이미지가 있고 하나의 화살표는 위쪽을 향하고 하나의 화살표는 아래를 향하게합니다. 아래쪽 화살표를 클릭하면 배열이 증가하여 표시됩니다 (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 [ '시작']'과'$ 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

두 가지는 조회하고 배우기가 정말 쉽습니다. 나는 이런 종류의 물건으로 누구에게나 쉽게 갈 필요가 없다고 생각합니다. :) 문서에 대한 링크도 포함되어 있습니다. http://www.php.net/printf 및 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

여기에 재미있게 배우고 퍼즐을 풀기위한 지침이 있습니다.

먼저, 원하는 인덱스를 인쇄하려면 불필요한 코드를 지적하십시오. 내부 루프를 수행 할 필요가 없습니다. 당신은 당신의 배열의 인덱스를 참조 할 수 있습니다

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

참고 중괄호 :

$stage_item[4] 

이 같은 루프 모양을 만들 것이라고! 지금은 표현이 좀 더 복잡하고 PHP가 조각을 분리하여 유지해야하기 때문에 필요합니다. 점진 당신은 페이지의 호출 사이에 노트와 메시지를 보낼 수있는

에 대한

. 내 말은, 마지막으로 호출 된 것을 어떻게 든 알 수 있어야합니다. url 매개 변수를 사용하여이 작업을 수행합니다.

당신은 URL에서 매개 변수를받을 수 있습니다! URL에서이 매개 변수는 키/값 쌍으로 공식화됩니다.

start=2 
end=7 

그들은

start=2&end=7 

키/값 쌍

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

여기 우리는 시작과 끝을 보낸이 (이가 만든 물음표 후 시작 앰퍼샌드로 구분됩니다 , 귀하의 예제에서 var1과 var2처럼) 페이지 url.php

다음은 magic 변수 $_GET으로 가져옵니다. 그것은 배열이고, 그것은 마술처럼 당신의 키에있는 열쇠를 가지고 있습니다. 그래서 시작하려면

$var1 = $_GET['start']; 

따옴표를 메모하십시오. 이것들은 키가 숫자 (일명 정수) 인 앞의 예제와는 달리,이 경우 키가 문자열이기 때문에 존재합니다. 이제 우리 페이지에서 그러한 URL을 어떻게 활성화시킬 수 있습니까? 글쎄, 너 이미지가있어, 그렇지? 어떻게 할 ...

<img src='arrowup.png' /> 

그냥 까다로운 부분에 대한

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

이제 앵커 태그에 그것을 넣어 (대신 img 태그를 사용, 여기에 입력 필드와 양식을 사용하지 않음) URL에 어떤 숫자를 넣을 지 알고 있습니까? 업로 우는 이미 가지고있는 것보다 작은 것입니다. 그리고 아래쪽 화살표의 경우, 그들은 하나 더 커집니다.

인덱스를 너무 작게 (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

나는 다른 대답들 중 하나와 함께 일할 수있게되었지만 나는 당신의 답을 찾아 가서 다른 방법을 배울 수 있습니다. 더 많이 배울수록 더 나아질 수 있습니다. 대단히 감사합니다. –

관련 문제