2011-02-09 9 views
0
여기

내가 달성하기 위해 노력하고있어입니다 m이 일 :PHP는 논리 연산자 비교 평가

if($x==("100"||"200"||"300")) 
{ 
    //do something 
} 

하지만 //do something$x400

경우에도 실행 0

나는이 작품 것으로 나타났습니다 :

if($x=="100"||$x=="200"||$x=="300") 
{ 
    //do something 
} 

어떻게 코드의 두 번째 블록에서 다른 코드의 첫 번째 블록? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 표현식이 적어도 하나 개의 truthy 값을 포함하고 있기 때문에

('100' || '200' || '300') 

항상 TRUE입니다 : 식의 결과가 있기 때문에

답변

3

코드가 작동하지 않는 이유입니다.

따라서 표현의 RHS는 TRUE이고 LHS는 진리 값이므로 전체 표현식은 TRUE으로 평가됩니다. 이 현상이 발생하는 이유는 == 연산자이며 느슨한 비교 때문입니다. ===을 사용하면 표현식은 항상 FALSE이됩니다. (물론하지 않는 한 $x의 값은 false-Y입니다.)

은의이 분석 보자 :

$x 동일한 '400' 가정 :

($x == ('100'||'200'||'300')) 

//^  ^
// true   true 

만들기 감각을 지금?

결론은 다음과 같습니다. 이것은 3 개의 값을 공통 변수과 비교하는 잘못된 방법입니다.

if(in_array($x, array('100', '200', '300')) { 
    //do something... 
} 
+1

왜이 게시물은 부정적인 투표 ????? –

+0

나는 누가 그에게 downvoted 모르지만 나는 그의 초기 반응이 뭔가 다른 것이기 때문에 그것이라고 생각한다. 나의 이전의 코멘트는 그의 초기 반응에 관한 것이었다. –

+0

답변 해 주셔서 감사합니다. jacob - 그 설명이 확실히 도움이됩니다! –

0

당신은 완벽하게 작동하고 배열의 모든 값을 사용할 수 있습니다

나의 제안은 in_array를 사용하는 것입니다.

$x=400; 

if(in_array($x, array('100', '200', '300'))) { 
    echo $x.'is in array'; 
} else { 
    echo $x.'is not in array'; 
}