PHP容易被忽略而出錯陷阱 數字與字串比較

2022-09-28 04:39:11 字數 1331 閱讀 4819

0 與任意非數字(或者說,不可轉化為數字的字元)前導的字串比較(操作符為==), 均返回 true.

原因是, 數字與字串比較時, 先嘗試將字串轉換為數字, 再程式設計客棧比較, 乙個不能轉換為數字的字串, 轉換結果為0, 故, 與0比較總返回 true.

更加詳細的比較規則, 多種型別的比較規則, 在php手冊/語言參考/運算子/比較運算子可以找到.

在php裡當兩個數字型字串(只含數字的字串)進行比較的時候是直接轉換成數值進行比較的

如下示例:(注意$a和$b兩個變數的最後一位不相等)

複製** **如下:

//示例1

<?php

$a = '511203199106034578';

$b = '511203199106034579';

if ($a==$b) else

?>

執行上面的程式卻發現結果為equal(非我們認為的結果)

我們把$a與$b分別加乙個字母a進去

複製** **如下:

//示例2

<?php

$a = 'a511203199106034578';

$b = 'a511203199106034579';

if ($a==$b) else

?>

這次輸出的是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) else

?>

這樣我們就可以得到預期中的notequal了

本文標題: php容易被忽略而出錯陷阱 數字與字串比較

本文位址: /wangluo/php/84986.html

PHP容易出錯之二 PHP中的數字與字串比較

php中的比較運算子有點詭異,很容易出錯,現列出比較規則 1 當兩個字元進行大小比較時,是比較著這兩個字元的ascii碼大小 這條很容易理解。2 當兩個字串進行大小比較時,是從第乙個字元開始,分別比教對應的ascii大小,只要從從某個對應位置開始,其中乙個字串的當前位置字元大於另乙個字串對應位置字元...

PHP中的數字與字串比較

php中的比較運算子有點詭異,很容易出錯,現列出比較規則 1 當兩個字元進行大小比較時,是比較著這兩個字元的ascii碼大小 這條很容易理解。2 當兩個字串進行大小比較時,是從第乙個字元開始,分別比教對應的ascii大小,只要從從某個對應位置開始,其中乙個字串的當前位置字元大於另乙個字串對應位置字元...

PHP中的數字與字串比較

當兩個字元進行大小比較時,是比較著這兩個字元的ascii碼大小 這條很容易理解。當兩個字串進行大小比較時,是從第乙個字元開始,分別比教對應的ascii大小,只要從從某個對應位置開始,其中乙個字串的當前位置字元大於另乙個字串對應位置字元,即直接判別出這兩個字串大小,如 ba az 那麼 10 與 a ...