>백엔드 개발 >PHP 튜토리얼 >PHP의 `in_array()` 및 `array_search()`가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?

PHP의 `in_array()` 및 `array_search()`가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-24 01:27:11960검색

Why Do PHP's `in_array()` and `array_search()` Sometimes Return Unexpected Results?

PHP의 in_array() 및 array_search() 함수: 이상한 동작 해결

PHP 함수 in_array() 및 array_search()는 특이한 동작을 나타냅니다. 배열의 값을 확인하는 데 사용되는 경우. 이 수수께끼 같은 문제는 배열에 다양한 유형의 요소가 포함될 때 발생합니다.

예:

$arr = [TRUE, "some string", "something else"];

$result = in_array("test", $arr);
var_dump($result);  // Output: bool(true)

$result = array_search("test", $arr);
var_dump($result);  // Output: int(0)

놀랍지 않나요? 두 함수 모두 true를 반환하여 "test"가 분명히 배열에 포함되어 있지 않더라도 배열에 있음을 나타냅니다. 이 동작은 이러한 함수에서 사용되는 기본 비교 메커니즘에서 비롯됩니다.

엄격한 비교와 느슨한 비교:

기본적으로 in_array() 및 array_search()는 느슨한 비교를 사용합니다. (==)는 비교되는 값의 유형이 달라도 true로 평가됩니다. 이 예에서는 배열의 TRUE 요소가 자동으로 문자열로 변환되어 TRUE == "test"가 true로 평가됩니다.

해결책: 엄격한 비교 시행

이러한 예상치 못한 동작을 방지하려면 이러한 함수의 선택적 세 번째 매개변수를 true로 설정하여 엄격한 비교(===)를 지정해야 합니다. 이렇게 하면 함수가 비교할 때 요소의 값과 유형을 모두 확인하도록 하여 보다 정확한 결과를 보장합니다.

$result = in_array("test", $arr, true);
var_dump($result);  // Output: bool(false)

$result = array_search("test", $arr, true);
var_dump($result);  // Output: int(-1)

이 수정된 예에서는 함수에 지시된 대로 올바른 결과를 얻습니다. 엄격한 비교를 사용하십시오. "test"는 배열에서 찾을 수 없으며 반환된 값은 이를 반영합니다.

위 내용은 PHP의 `in_array()` 및 `array_search()`가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.