比較運算符

如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換爲數值並且比較按照數值來進行。此規則也適用於 switch 語句。

<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 0:
    echo "0"; //輸出 0
    break;
case "a": // 不會執行,因爲'a'匹配了0
    echo "a";
    break;
}

拓展:字符串轉換爲數值

當一個字符串被當作一個數值來取值,其結果和類型如下:

如果該字符串沒有包含 '.','e' 或 'E' 並且其數字值在整型的範圍之內(由 PHP_INT_MAX 所定義),該字符串將被當成 integer 來取值。其它所有情況下都被作爲 float 來取值。

該字符串的開始部分決定了它的值  ±(0-9).(0-9)。如果該字符串以合法的數值開始,則使用該數值。否則其值爲 0(零)。合法數值由可選的正負號,後面跟着一個或多個數字(可能有小數點,.3當0.3),再跟着可選的指數部分。指數部分由 'e' 或 'E' 後面跟着一個或多個數字構成。

<?php
$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)     
?>

對於多種類型,比較運算符根據下表比較(按順序)。

比較多種類型
運算數 1 類型 運算數 2 類型 結果
nullstring string NULL 轉換爲 "",進行數字或詞彙比較
boolnull 任何其它類型 轉換爲 boolFALSE < TRUE
object object 內置類可以定義自己的比較,不同類不能比較,相同類和數組同樣方式比較屬性(PHP 4 中),PHP 5 有其自己的說明
stringresourcenumber stringresourcenumber 將字符串和資源轉換成數字,按普通數學比較
array array 具有較少成員的數組較小,如果運算數 1 中的鍵不存在於運算數 2 中則數組無法比較,否則挨個值比較(見下例)
object 任何其它類型 object 總是更大
array 任何其它類型 array 總是更大

in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) :bool  踩過的 一個坑 

注意事項:弱類型比較,特別是0的比較,如果需要嚴格比較,指定第三個參數爲true。

<?php
$test = 0;
$array = array('a', 'b', 'c');
if (in_array($test, $array)) {
    echo 'in array';
} else {
    echo 'no';
}
//output: in

$test = '0';
$array = array('a', 'b', 'c');
if (in_array($test, $array)) {
    echo 'in array';
} else {
    echo 'no';
}
//output: no

拓展:PHP 類型比較表

以上內容參考:比較運算符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章