PHP中的比較運算子

somehow1002發表於2017-08-23

一般規則

一般來說,有以下規則
一般比較規則

數字與字串比較

如果比較一個數字和字串或者比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。但當用 === 或 !== 進行比較時則不進行型別轉換,因為此時型別和數值都要比對。
例如:

<?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

型別轉換

關於不同型別比較之中的型別轉換
型別轉換比較

標準陣列比較

提供一種陣列比較的思路:
* 比較陣列元素個數
* 若元素個數相同,則比較鍵名。如果陣列1中的鍵名陣列2中沒有,則無法比較,返回NULL
* 如果陣列2中存在相同鍵名,則比較值大小
該方法中沒有處理鍵名順序問題,可能導致不同結果。[建議先對陣列元素按鍵名排序]

<?php
// 陣列是用標準比較運算子這樣比較的
function standard_array_compare($op1, $op2)
{
    if (count($op1) < count($op2)) {
        return -1; // $op1 < $op2
    } elseif (count($op1) > count($op2)) {
        return 1; // $op1 > $op2
    }
    foreach ($op1 as $key => $val) {
        if (!array_key_exists($key, $op2)) {
            return null; // uncomparable
        } elseif ($val < $op2[$key]) {
            return -1;
        } elseif ($val > $op2[$key]) {
            return 1;
        }
    }
    return 0; // $op1 == $op2
}

相關文章