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

來源:互聯網
上載者:User

標籤: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 字串和數字比較一些問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.