2014-04-26 2 views
2

왜 이것이 사실을 반환합니까?in_array()가 작동하지 않습니다.

$needle = TRUE; 
$haystack = array('that', 'this'); 

print in_array($needle, $haystack); // 1 

편집 : 나는 하나의 유형을 확인 in_array() 엄격한 매개 변수를 전달할 수 있음을 알고 있습니다. 알고 싶습니다 특히 내가 보여 주는 동작이 출품됩니다.

+0

당신이 배열, 부울 변수 또는 부울 문자열에서 찾을 하시겠습니까? 문서 기반 ** needle이 문자열 인 경우 비교는 대소 문자를 구별하여 수행됩니다. ** – Javad

+2

['in_array']에 대한 설명보기 (http://www.php.net/manual/en/function .in-array.php)와 세 번째 매개 변수'$ strict'. – mario

+0

나는 in_array()에 엄격한 매개 변수를 전달할 수 있음을 알고 있지만, 내 질문에 대한 답변을 원했습니다 (지금은 아래에 있음). – jpstrikesback

답변

3

PHP에서 비어 있지 않은 문자열은 느슨한 비교 (즉, 유형이 무시 됨) 인 경우 TRUE과 같습니다. 당신은 수행하여이를 테스트 할 수 있습니다

var_dump('this' == TRUE); 
var_dump('that' == TRUE); 

DEMO

을하지만 결과는 엄격한 비교가 이루어질 때 매우 다르다 (즉, 유형은 고려) :

var_dump('this' === TRUE); 
var_dump('that' === TRUE); 

DEMO

in_array 함수에서 엄격한 비교를 적용하려면 선택적인 세 번째 매개 변수를으로 설정해야합니다:

$needle = TRUE; 
$haystack = array('that', 'this'); 

var_dump(in_array($needle, $haystack, TRUE)); 

DEMO

+0

좋은 설명. 유형을 비교하기 위해 엄격한 매개 변수를 전달할 수 있음을 이해했으며, 직면 한 다소 비 직관적 인 동작을 이해하고자했습니다. FWIW 내가 제어 할 수없는 함수 (drupal hookesque 호출)에 반환에서 bool을 전달할 때 in_array() 거짓말. [! in_Array() here] (http://drupalcode.org/project/commerce_cardonfile.git/blob/075dc820077794fe8283b0c7159a63020f2ef53b:/commerce_cardonfile.module#l1457)를 참조하십시오. – jpstrikesback

관련 문제