php字符串与数字比较,PHP容易被忽略而出错陷阱 数字与字符串之间的比较
數字與字符串之間的比較
//數值0與任意非數字(或者說,不可轉化為數字的字符)前導的字符串比較(操作符為==),均返回 true.
//原因是:數字與字符串比較時,先嘗試將字符串轉換為數字,再比較,一個不能轉換為數字的字符串,轉換結果為0,故與0比較總返回true.
//因為0和字符串比較,皆返回true 嚴格比較需要使用===(且最好加單引號)
// 0 == 'sdssdsa' 返回true(注意)
// '0' == 'sdssdsa' 返回false
// 0 === 'sdssdsa'返回false
// '0' === 'sdssdsa'返回false(嚴謹一些)
// 1 == '1asdsad'返回true(注意)
// '1' == '1asdsad'返回false
// 1 == 'a122asd'返回false
if('0' === 'sdssdsa'){
echo '相同/匹配!!!';
}else{
echo '不同/不匹配???';
}
// 特殊,兩個數值類型過長的比較。php會自動轉換類型,會影響比較結果。
//在PHP里當兩個數字型字符串(只含數字的字符串)進行比較的時候是直接轉換成數值進行比較的
$a = '511203199106034578';
$b = '511203199106034579';
if($a==$b){
echo '相同/匹配!!!
';
}else{
echo '不同/不匹配???
';
}
//運行上面的程序卻發現結果為"相同/匹配!!!"(非我們認為的結果)
//上面示例為"相同/匹配!!!"是因為PHP把兩個數字型字符串轉換成數字型,而這兩個數字剛好相等如下
$a = 511203199106034578;
$b = 511203199106034579;
echo $a."
"; // 輸出 5.1120319910603E+17 即511203199106030000
echo $b."
"; // 輸出 5.1120319910603E+17 即511203199106030000
//所以我們在示例1中得到的結果是"相同/匹配!!!"
//我們把$a與$b分別加一個字母a進去
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if($a==$b){
echo '相同/匹配!!!
';
}else{
echo '不同/不匹配???
';
}
//這次輸出的是"不同/不匹配???"(正確的結果)
//避免出現這種非預期結果的情況是使用類型比較符===如下示例(如果$a等于$b,并且它們的類型也相同)
$a = '511203199106034578';
$b = '511203199106034579';
if($a===$b){
echo '相同/匹配!!!
';
}else{
echo '不同/不匹配???
';
}
//這樣我們就可以得到預期中的"不同/不匹配???"了
//(數值需要帶引號,不帶引號===返回值亦為"相同/匹配!!!")
//延伸示例
$str = 'host';
$arr = array('0'=>'AAAA','host'=>'BBBB','1'=>'CCCC');
foreach($arr as $k=>$v){
if($k == $str){//$k為數值型
echo $str.'=='.$k.'======>'.$v;
}
}
//得到的結果為:host==0======>AAAA host==host======>BBBB
So, do you want to take a leap of faith? Or become an old man, filled with regret, waiting to die alone? 那么,你愿意放手一搏,還是要等到年華老去,心中充滿遺憾,孤獨地邁向黃泉路?—《盜夢空間》
總結
以上是生活随笔為你收集整理的php字符串与数字比较,PHP容易被忽略而出错陷阱 数字与字符串之间的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thymeleaf select_Spr
- 下一篇: php解析验证码,全面解析PHP验证码的