本文章來給大家介紹關於php 字符串和數字比較一些問題,因為數字與字符在php中是不同的數據類型,所以在比較時可能會有很多的問題。
今天遇到一個問題,調用對方接口,按照接口說明,返回為數字0,1,2等等,其中0標示成功,其他表示不同的錯誤代碼。程序通過 if ($ret == 0) 進行判斷,開始程序是好的,今天出現問題了,由於對方接口修改,直接返回字母字符串作為錯誤信息提示,然后我這邊就悲劇了,上述判斷永遠都為TRUE。
原因在於php是弱類型語言,所以可以對兩個不同類型的變量進行比較操作,但最終進行比較前,php會把某一方轉換稱另一方一樣的類型,這點很重要。如果是字符串和數字進行比較,那么php會把字符串強制轉換稱數字,對於純字母的字符串,那么轉換后就是0了,所以if ($ret == 0) 成了。
PHP手冊/語言參考/運算符/比較運算符可以找到.
在PHP里當兩個數字型字符串(只含數字的字符串)進行比較的時候是直接轉換成數值進行比較的
如下示例:(注意$a和$b兩個變量的最后一位不相等)
代碼如下 |
復制代碼 |
//示例1 |
運行上面的程序卻發現結果為equal(非我們認為的結果)
我們把$a與$b分別加一個字母a進去
代碼如下 |
復制代碼 |
|
這次輸出的是notEqual(正確的結果)
示例1為equal是因為PHP把兩個數字型字符串轉換成數字型,而這兩個數字剛好相等如下示例
代碼如下 |
復制代碼 |
<?php |
所以我們在示例1中得到的結果是equal
避免出現這種非預期結果的情況是使用類型比較符===如下示例(如果 $a 等於 $b,並且它們的類型也相同)
代碼如下 |
復制代碼 |
//示例4 |
這樣我們就可以得到預期中的notEqual了