2009-11-06 5 views
1

나는 다차원 연관 배열을 사용하여 월간 합계를 추적하고 foreach를 사용하여 루프를 반복하여 내용을 출력하려고합니다. 각 내부 어레이다차원 배열 키 - 이상한 동작

합계 소자 (12)에 보존하고, 전체가> 0 인 경우에만 그것을 0

foreach($yearspend as $key => $format) 
    { 
    // only show formats with any spend 
    if($key == "Total" || $format[12] > 0) 
    { 
     echo "<tr><td>$key</td>"; 
     foreach($format as $value) 
     { 
      echo "<td>".number_format($value,2)."</td>"; 
     } 
     echo "</tr>"; 
    } 
    } 
하더라도 출력 싶다 "전체"를 제외하고, 출력에 각각 배열하려는

Array 
(
    [0] => Array 
     (
      [12] => 0 
     ) 

    [Group] => Array 
     (
      [12] => 0 
     ) 

    [Total] => Array 
     (
      [12] => 0 
     ) 
) 

사람 도움하세요 [0] [12] 여기서 0

이다에서 print_r의 출력하더라도이 내부 배열 0 출력 어떤 이유

?

답변

1

$key === "Total" ... 

문자열과 숫자를 비교, PHP는 숫자 형식으로 문자열을 변환하려고하고 비교를 수행하십시오. '==='연산자는 값과 유형을 비교하므로 문자열은 결코 숫자와 같지 않습니다.

+0

당신이 말하는 모든 것이 사실입니다. 그러나 그것은 문제를 해결하지 못할 것이다. 조건은'if ($ key == "Total"|| $ format [12]> 0)'$ 키가 "Total"으로 평가 되 자마자 나머지 조건은 무시됩니다. – dnagirl

+0

그게 그가 원하는 것입니다 : "0 인 경우에도"Total "을 제외하고 총계가> 0 인 경우에만 각 배열에 출력하고 싶습니다." –

+0

감사합니다 - 그게 완벽하게 작동합니다. – malcomio

0

이 오류는 일반적인 오류 일 수 있습니다. 조건이 바뀌면 여전히 오류가 있습니까?

if($key == "Total" || $format[12] > 0.001) 
1

값이 파서에 의해 결정되지 않으면 문자의 문자열은 0으로 평가됩니다. 즉 "4"는 4와 같지만 "Total"은 0과 동일하게 취급됩니다. 따라서 PHP에서는 표현식이

"Total" == 0 

이 true를 반환합니다.

당신은 === 연산자를 사용하여이 문제를 해결할 수 있습니다 false를 돌려

if ("Total" === 0) 

0

스콧의 대답은 작동합니다 ($ 키 === "총"). 또는이 :

if (strval($key) == "Total" || $format[12] > 0) 
0

내가 PHP의 foreach는 문서에이 댓글 보았다

foreach 문을 사용할 때하는 배열의 키 ($ 키 => $ 값)를 통과 주목해야한다을의 키는 문자열이어야하며 이진 내용이 아니어야합니다. 내 경우에는 0을 포함하여 사용해야합니다. foreach는 bencoded 데이터를 구문 분석합니다. 비트 토 런트 트랙커에서 다시 스크래핑 - 이것은 foreach를 내고 을 해제합니다. 너 내가 열쇠 s 이진 실제 배열 내용이 과 다릅니다.

답변이 아니지만 문제 해결에 도움이 될 것으로 기대됩니다.

+0

절대로 시간을 벌리지 못합니다. 나는 나의 대답을 끝내고 갑자기 "4 개의 새로운 대답이 게시되었습니다 ..."라고 말했습니다. –