최근 비교 작업을 수행할 때 몇 가지 문제가 발생했습니다. 보통 세부 사항을 무시하지만 이번에는 문제가 발생할 것이라고 예상하지 못했습니다.
PHP의 == 비교 연산자는 두 데이터의 값이 같으면 true를 반환하고, 그렇지 않으면 false를 반환한다는 의미입니다. 여기서 말하는 것은 값이 동일하면 결과가 true라는 것입니다. 즉, 여기서는 값의 유형을 비교하지 않습니다. 예: 12 == '12' 결과는 true입니다.
PHP 변수의 약한 유형으로 인해 변수의 유형을 의도적으로 고려하지 않는 경우가 많으며, 이번에 발생한 문제는 변수 유형으로 인해 발생합니다.
array_search 함수를 사용할 때 문제가 발생합니다.
array_search는 해당 값이 존재하는 경우 해당 값에 해당하는 인덱스를 반환합니다. 이 값이 여러 번 발생하면 첫 번째로 검색된 인덱스가 반환됩니다. 값이 존재하지 않으면 false를 반환합니다.
다음과 유사한 환경에서 문제가 발생했습니다.
<?php$testA = array( 'a' => '123', 'b' => 'iphp8.com', 'c' => '014778', 'd' => '14778', ); echo array_search('14778', $testA);
이때 얻은 결과는 c입니다.
array_search는 기본적으로 값의 종류를 비교하지 않기 때문에, 즉 == 비교를 합니다. 순수 숫자의 경우 문자열도 비교를 위해 숫자로 변환하는 것처럼 보이므로 앞에 0이 몇 개 있어도 상관 없으며 "14778"과 "014778"은 동일하므로 위의 예에서는 반환된 The 결과는 우리가 생각했던 d가 아니라 c입니다.
이때 원하는 결과를 얻으려면 === 비교를 수행해야 하는데, 이는 값과 유형을 모두 비교해야 합니다.
array_search의 경우 세 번째 매개변수에 참값을 부여하여 합동 비교를 수행할 수 있습니다.
위 내용은 Note 010 PHP의 == 비교연산자에 대한 참고사항입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!