PHP容易被忽略而出錯陷阱 數字與字符串比較
更新時間:2011年11月10日 01:04:33 作者:
數字與字符串比較時, 先嘗試將字符串轉換為數字, 再比較, 一個不能轉換為數字的字符串, 轉換結果為0, 故, 與0比較總返回 true
0 與任意非數字(或者說,不可轉化為數字的字符)前導的字符串比較(操作符為==), 均返回 true.
原因是, 數字與字符串比較時, 先嘗試將字符串轉換為數字, 再比較, 一個不能轉換為數字的字符串, 轉換結果為0, 故, 與0比較總返回 true.
更加詳細的比較規(guī)則, 多種類型的比較規(guī)則, 在 PHP手冊/語言參考/運算符/比較運算符 可以找到.
在PHP里當兩個數字型字符串(只含數字的字符串)進行比較的時候是直接轉換成數值進行比較的
如下示例:(注意$a和$b兩個變量的最后一位不相等)
復制代碼 代碼如下:
//示例1
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
運行上面的程序卻發(fā)現結果為equal(非我們認為的結果)
我們把$a與$b分別加一個字母a進去
復制代碼 代碼如下:
//示例2
<?php
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
這次輸出的是notEqual(正確的結果)
示例1為equal是因為PHP把兩個數字型字符串轉換成數字型,而這兩個數字剛好相等如下示例
復制代碼 代碼如下:
<?php
$a = 511203199106034578;
$b = 511203199106034579;
echo $a; // 輸出 5.1120319910603E+17 即511203199106030000
echo $b; // 輸出 5.1120319910603E+17 即511203199106030000
?>
所以我們在示例1中得到的結果是equal
避免出現這種非預期結果的情況是使用類型比較符===如下示例(如果 $a 等于 $b,并且它們的類型也相同)
復制代碼 代碼如下:
//示例4
<?php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a===$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>
這樣我們就可以得到預期中的notEqual了
相關文章
php使用Image Magick將PDF文件轉換為JPG文件的方法
這篇文章主要介紹了php使用Image Magick將PDF文件轉換為JPG文件的方法,涉及php使用Image Magick擴展操作圖片的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04
探究Laravel使用env函數讀取環(huán)境變量為null的問題
最近在工作中遇到一個問題,不知道大家有沒有遇到過,在 Laravel中(除 app/config 目錄下的配置文件中)使用env函數讀取環(huán)境變量,有時有用,有時返回 null,這究竟怎么回事?下面通過這篇文章讓我們一探究竟。有需要的朋友們下面來一起看看吧。2016-12-12

