php 老鳥新人 都來看看吧 這個有關問題有意思

來源:互聯網
上載者:User
php 老鳥新人 都來看看吧 這個問題有意思
 $id1="42022219860323211";
$id2="42022219860323210";
if($id1==$id2){
echo"這兩個身份證相同";
}else{
echo"這兩個身份證不相同";

}


理論上是會輸出
這兩個身份證不相同

但實際輸出有點出入


我和另一個同事的 web環境 都是輸出 這兩個身份證相同
我一個同事 卻是正常的 這兩個身份證不相同

這兩個變數 列印出來 都是 string

是不是php設定哪裡不一樣?
------解決思路----------------------
那就用===好了
------解決思路----------------------
列印下PHP_INT_MAX 看看兩個數字是否超過了php中允許的整型的範圍

建議使用===進行比較。
------解決思路----------------------
好像找到原因了了
PHP中的比較子有點詭異,很容易出錯,現列出比較規則:

1、當兩個字元進行大小比較時,是比較著這兩個字元的ASCII碼大小——這條很容易理解。

2、當兩個字串進行大小比較時,是從第一個字元開始,分別比教對應的ASCII大小,只要從從某個對應位置開始,其中一個字串的當前位置字元大於另一個字串對應位置字元,即直接判別出這兩個字串大小,如'ba'>'az'——這條其實大家也都知道的。

那麼'10'與'a'比較呢,當然還是一樣的啦,首先將'1'和'a'ASCII碼進行比較,'a'大。

3、當一個數字與一個字串/字元進行大小比較時,首先系統嘗試將此字串/字元轉換為整型/浮點型,然後進行比較,如'12bsd'轉型為12,'a'轉型為0,千萬需要注意的是此時不是將其對應的ASCII碼值與數字進行大小比較了。

其實同樣的道理,'a'+10結果也是10。

並且容易忽略的:0 與任意不可轉化為數位字串比較(操作符為==), 均返回 true。

最後就會出現如下結果:

1 var_dump('1000000'<'a'); //result: boolean true
2 var_dump('a'<1); //result: boolean true
3 var_dump(1<'1000000'); //result: boolean true

與常規中的思維還是有一點點不同的吧。。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.