2012-04-11 1 views
1

여기에서 바로 생각해보십시오. forecast_conditions의 정확한 금액을 계산하는 코드가 4 개 있습니다. (count($condition) -1) <= 4 ? ', ' : ', eller '.count (data)가 4보다 작거나 같은 경우 인쇄하십시오. 그렇지 않으면 두 개를 인쇄하십시오. 작동하지 않습니다.

count($condition) 인쇄물 5 그래서 거기에 마이너스 부호가 있어야합니다. $conditionforeach에 있으므로 콘텐츠를 루프 할 수 있습니다 forecast_conditions; foreach($whome_answer[weather][forecast_conditions] AS $condition) {.

위의 코드는 onsdag, torsdag, fredag, lördag,을 인쇄합니다. 이것은 잘못되었습니다. 내가 원하는 방법은 다음과 같습니다. onsdag, torsdag, fredag, eller lördag하지만 코드에서 제대로 이해할 수 없습니다! 모든 종류의 솔루션 (== 4,> = 4,! = 4, < 4 등)을 테스트했습니다.

어떻게하면 제대로 작동합니까?

미리 감사드립니다. http://www.google.com/ig/api?weather=,,,59378217,13504219&hl=en

EDIT (솔루션하지만 또 하나 개의 문제) 코드 : 여기

foreach($whome_answer[weather][forecast_conditions] AS $condition) { 

    # KONTROLL 
    if(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'mån') { 
     $day = 'måndag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tis') { 
     $day = 'tisdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'ons') { 
     $day = 'onsdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tors') { 
     $day = 'torsdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'fre') { 
     $day = 'fredag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'lör') { 
     $day = 'lördag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'sön') { 
     $day = 'söndag'; 
    } 



    echo '<a href="javascript:void(0)" class="forecast-link">'; 
     echo $day; 
    echo '</a>'; 

    echo (count($condition) -1) <= 4 ? ', ' : ', eller '; 

} 

내가에서 콘텐츠를 가져 오는 링크입니다 : 여기에 편집

루프입니다 아래는 해결책이지만 지금은 찾고 있던 것 대신에 onsdag, torsdag, fredag, eller lördag,을 인쇄하고 있습니다. "lördag"다음에 마지막 쉼표를 제거하려면 어떻게해야합니까? 'if 태그'뒤에 $i을 포함하면 모양이 어떻게됩니까 : onsdag, 2torsdag, 3fredag, eller 4lördag, 5.

어떻게이 문제를 해결할 수 있습니까?

$i = 1; 
foreach($whome_answer[weather][forecast_conditions] AS $condition) { 
    $i++; 

    # KONTROLL 
    if(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'mån') { 
     $day = 'måndag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tis') { 
     $day = 'tisdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'ons') { 
     $day = 'onsdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tors') { 
     $day = 'torsdag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'fre') { 
     $day = 'fredag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'lör') { 
     $day = 'lördag'; 

    # KONTROLL 
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'sön') { 
     $day = 'söndag'; 
    } 



    echo '<a href="javascript:void(0)" class="forecast-link">'; 
     echo $day; 
    echo '</a>'; 

    echo $i != 4 ? ', ' : ', eller '; 

} 
+0

잘 모르겠습니다. 카운트의 오해와 같은 것 같습니다. "count (data)가 4보다 작거나 같으면 count ($ data) <= 4입니다. -1이 어디에서 왔는지 확실하지 않습니다. – Corbin

+0

전체 질문을 읽어보십시오. – Erik

+0

<대신 <= – jack

답변

3

$ i라는 foreach 바깥의 변수를 인스턴스화하고 0으로 설정하고 각 루프마다 1 씩 증가시키고 대신 해당 변수를 검사합니다.

왜냐하면 count는 dom 객체의 위치를 ​​반환하지 않는다고 생각합니다. $ 조건에서 얼마나 많은 값을 가지고 있는지 계산하고 있습니다.

것은이 코드, 프로그래머 프로그래머를 고려하시기 바랍니다, 훨씬 쉽게 읽을 :)

$i = 0; 
foreach($whome_answer[weather][forecast_conditions] AS $condition) { 
    $i++; 
    switch($condition['day_of_week']['@attributes']['data']) { 
     case 'mån': 
      $day = 'måndag'; 
     break; 
     case 'tis': 
      $day = 'tisdag'; 
     break; 
     case 'ons': 
      $day = 'onsdag'; 
     break; 
     case 'tors': 
      $day = 'torsdag'; 
     break; 
     case 'fre': 
      $day = 'fredag'; 
     break; 
     case 'lör': 
      $day = 'lördag'; 
     break; 
     case 'sön': 
      $day = 'söndag'; 
     break; 
    } 

echo '<a href="javascript:void(0)" class="forecast-link">'; 
    echo $day; 
echo '</a>'; 

if($i == 4) 
    echo ', eller'; 
else { 
     if($i < 4) 
     echo ','; 
    } 

} 

감사 토비아스

+0

개념 증명으로서 그는 루프가 실행될 때마다 count ($ condition)를 반향 출력 해 볼 수 있습니다. 개수가 잘못되었을 경우 문제의 원인 일 가능성이 높습니다 – orourkek

+0

고마워요! 나는 당신의 솔루션을 가지고 작업하게 만들었지 만 문자열 끝에 쉼표 (',')가 있습니다. 자세한 내용은 내 편집을 참조하십시오. – Erik

+1

방금 ​​코드 끝에있는 마지막 if 문으로 오류를 수정했습니다. – Tobias

0

당신은 상관없이 계수()의 결과가 무엇인지 본질적으로 전체 문장을 만드는 것이 수() 조건문의 에코 뿅을 아무것도하지 않고 실종 없습니다 있습니다. 이것이 복사/붙여 넣기 오류 인 경우 더 많은 소스 코드를 제공 할 수 있습니까?

+0

물론 내 코드 앞에 'echo'가 있습니다. 그것은 필수입니다! 정보를 가져 오는 웹 사이트에 대한 전체 루프 및 링크에 대한 편집을 참조하십시오. – Erik

+0

@Erik - 확신해야 함 :] 조건부 전체를 괄호로 묶어 보았습니까? 예 :'echo ((count ($ condition) -1) <= 4)? ',': ', eller'; ' – orourkek

+0

나는 지금까지하지 않았다 :) 그것은 트릭을 만들지 않았다. – Erik

0

내가 인쇄 된 예와 I에서 다음 ... 코드를 찾고 있어요를 고맙습니다 ... 인쇄 중입니다. ','| ', 이후 각 $ 조건. 이는 확인하려는 조건이 만들어지기 전에 화면에 인쇄 할 때 상황을 복잡하게 만듭니다.

쉼표는 읽을 수있는 올바른 구문에 필수적이므로 무시하지 마십시오.

반면 'eller'는 화면에 인쇄하기 전에 확인할 수 있습니다.

그래서 코드의 내 해석은 ... 난 당신이 이미 가지고있는 데이터의 일을 판단 할 수 있으리라 믿고있어

$counter = 1; 
$amount = count($whome_answer[weather][forecast_conditions]); 
foreach($whome_answer[weather][forecast_conditions] AS $condition) { 
    if ($counter == 4) echo 'eller '; 
    echo $condition['day']; 
    if ($counter != $amount) echo ', '; 
    $counter++; 
} 

을 더 같은 수와 '일'의 키를 만든 것 $ 조건마다.

마찬가지로 논리가 (count($condition) -1) <= 4 ? ', ' : ', eller ' 인 경우 count($condition)이 5 인 경우 항상 true로 테스트되므로 쉼표 만 반환됩니다.

편집 : 새로운 문제에 대한 응답으로 변경되었습니다.

관련 문제