PHP 숫자와 문자열의 일반적인 트랩에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-10 22:28:02
원래의
1702명이 탐색했습니다.

0 숫자(또는 숫자로 변환할 수 없는 문자)가 아닌 선행 문자열과 비교 ( 연산자 ==)를 비교하면 모두 true를 반환합니다.

그 이유는 숫자와 문자열을 비교할 때는 먼저 문자열을 숫자로 변환한 다음 비교하세요. 문자열을 숫자로 변환할 수 없으면 변환 결과는 0입니다. 따라서 0과 비교하면 항상 true가 반환됩니다. 두 개의 숫자 문자열(숫자의 문자열만)을 숫자 값으로 직접 변환하여 비교하는 경우

다음 예: (두 변수 $a와 $b의 마지막 숫자가 같지 않음에 유의)

샘플 코드 :

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
로그인 후 복사

위를 실행합니다. 프로그램은 결과가 동일하다는 것을 발견했습니다(우리가 생각한 결과가 아님). $a와 $b에 각각 문자 a를 추가했습니다.

<?php 
$a = &#39;a511203199106034578&#39;; 
$b = &#39;a511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
로그인 후 복사

이번 출력은 notEqual(올바른 결과)입니다.

설명: 위의 예는 PHP가 두 개의 숫자 문자열을 숫자 유형으로 변환하고 두 숫자가 정확히 동일하기 때문에 동일합니다.

<?php 
$a = 511203199106034578; 
$b = 511203199106034579; 
echo $a; // 输出 5.1120319910603E+17 即511203199106030000 
echo $b; // 输出 5.1120319910603E+17 即511203199106030000 
?>
로그인 후 복사

그래서 이 예에서 얻은 결과는 동일합니다.

이 예상치 못한 결과를 방지하려면 유형 비교를 사용하세요. 연산자 == =다음 예($a가 $b와 같고 해당 유형도 동일한 경우)

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a===$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
로그인 후 복사

예를 들어 설명하세요

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!