php 字符串和數字比較一些問題


 

本文章來給大家介紹關於php 字符串和數字比較一些問題,因為數字與字符在php中是不同的數據類型,所以在比較時可能會有很多的問題。

今天遇到一個問題,調用對方接口,按照接口說明,返回為數字012等等,其中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(正確的結果)

示例1equal是因為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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM