標籤:group 問題 情況 轉換 錯誤資訊 注意 border echo 比較子
本文章來給大家介紹關於php 字串和數字比較一些問題,因為數字與字元在php中是不同的資料類型,所以在比較時可能會有很多的問題。
今天遇到一個問題,調用對方介面,按照介面說明,返回為數字0,1,2等等,其中0標示成功,其他表示不同的錯誤碼。程式通過 if ($ret == 0) 進行判斷,開始程式是好的,今天出現問題了,由於對方介面修改,直接返回字母字串作為錯誤資訊提示,然後我這邊就悲劇了,上述判斷永遠都為TRUE。
原因在於php是弱類型語言,所以可以對兩個不同類型的變數進行比較操作,但最終進行比較前,php會把某一方轉換稱另一方一樣的類型,這點很重要。如果是字串和數字進行比較,那麼php會把字串強制轉換稱數字,對於純字母的字串,那麼轉換後就是0了,所以if ($ret == 0) 成了。
PHP手冊/語言參考/運算子/比較子可以找到.
在PHP裡當兩個數字型字串(只含數位字串)進行比較的時候是直接轉換成數值進行比較的
如下樣本:(注意$a和$b兩個變數的最後一位不相等)
代碼如下 |
複製代碼 |
//樣本1 <?php $a = ‘511203199106034578‘; $b = ‘511203199106034579‘; if ($a==$b) { echo ‘equal‘; } else { echo ‘notEqual‘; } ?> |
運行上面的程式卻發現結果為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 字串和數字比較一些問題