0 숫자(또는 숫자로 변환할 수 없는 문자)가 아닌 선행 문자열과 비교 ( 연산자 ==)를 비교하면 모두 true를 반환합니다.
그 이유는 숫자와 문자열을 비교할 때는 먼저 문자열을 숫자로 변환한 다음 비교하세요. 문자열을 숫자로 변환할 수 없으면 변환 결과는 0입니다. 따라서 0과 비교하면 항상 true가 반환됩니다. 두 개의 숫자 문자열(숫자의 문자열만)을 숫자 값으로 직접 변환하여 비교하는 경우
다음 예: (두 변수 $a와 $b의 마지막 숫자가 같지 않음에 유의)
샘플 코드 :
<?php $a = '511203199106034578'; $b = '511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
위를 실행합니다. 프로그램은 결과가 동일하다는 것을 발견했습니다(우리가 생각한 결과가 아님). $a와 $b에 각각 문자 a를 추가했습니다.
<?php $a = 'a511203199106034578'; $b = 'a511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
이번 출력은 notEqual(올바른 결과)입니다.
설명: 위의 예는 PHP가 두 개의 숫자 문자열을 숫자 유형으로 변환하고 두 숫자가 정확히 동일하기 때문에 동일합니다.
<?php $a = 511203199106034578; $b = 511203199106034579; echo $a; // 输出 5.1120319910603E+17 即511203199106030000 echo $b; // 输出 5.1120319910603E+17 即511203199106030000 ?>
그래서 이 예에서 얻은 결과는 동일합니다.
이 예상치 못한 결과를 방지하려면 유형 비교를 사용하세요. 연산자 == =다음 예($a가 $b와 같고 해당 유형도 동일한 경우)<?php $a = '511203199106034578'; $b = '511203199106034579'; if ($a===$b) { echo 'equal'; } else { echo 'notEqual'; } ?>
<?php $str1 = "123456789012345678"; $str2 = "123456789012345679"; if($str1 == $str2){ echo "1.equal\n"; }esle{ echo "1.not equal\n"; } if($str1 === $str2){ echo "2.equal\n"; }esle{ echo "2.not equal\n"; } if(strcmp($st1, $str2)==0){ echo "3.equal\n"; }esle{ echo "3.not equal\n"; } if($str1 == $str2){ echo "1.equal\n"; }esle{ echo "1.not equal\n"; }
실행 후 결과가 상당히 이상합니다.
1.equal
2.같지 않음
3 .같지 않음
이유를 확인했습니다. PHP는 두 숫자 문자열을 비교할 때 먼저 두 문자열을 숫자로 처리하고 과학적 표기법으로 소수점 16을 유지합니다. 비트. 즉, 저장 시 $str1=1.2345678901234567E+17; $str2=1.2345678901234567E+17입니다. 따라서 $str1==$str2로 판단됩니다. 길이가 다르거나 숫자가 아닌 문자를 문자열에 추가하면 두 문자열이 동일하지 않게 됩니다. 따라서
데이터 유형을 결정할 수 있으면 세 번째 등호 판단을 사용하고, 강한 유형 판단을 위해서는 strcmp 또는 strcasecmp을 사용하는 것이 좋습니다.
위 내용은 PHP 숫자와 문자열의 일반적인 트랩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!