Операторы сравнения, как следует из их названия, позволяют сравнивать два значения. Вам также может быть интересно просмотреть таблицы сравнения типов , так как они показывают примеры различных сравнений типов.
Example | Name | Result |
---|---|---|
$a == $b | Equal | true if $a is equal to $b after type juggling. |
$a === $b | Identical | true if $a is equal to $b, and they are of the same type. |
$a != $b | Not equal | true if $a is not equal to $b after type juggling. |
$a <> $b | Not equal | true if $a is not equal to $b after type juggling. |
$a !== $b | Not identical | true if $a is not equal to $b, or they are not of the same type. |
$a < $b | Less than | true if $a is strictly less than $b. |
$a > $b | Greater than | true if $a is strictly greater than $b. |
$a <= $b | Less than or equal to | true if $a is less than or equal to $b. |
$a >= $b | Greater than or equal to | true if $a is greater than or equal to $b. |
$a <=> $b | Spaceship | An int less than, equal to, or greater than zero when $a is less than, equal to, or greater than $b, respectively. |
Если оба операнда являются числовыми строками или один операнд является числом, а другой числовой строкой , то сравнение выполняется численно. Эти правила также применяются к оператору switch . Преобразование типа не происходит при сравнении ===
или !==
, поскольку оно включает сравнение типа и значения.
<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Objects
$a = (object) ["a" => "b"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 0
$a = (object) ["a" => "b"];
$b = (object) ["a" => "c"];
echo $a <=> $b; // -1
$a = (object) ["a" => "c"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 1
// not only values are compared; keys must match
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 1
?>
Для различных типов сравнение производится по следующей таблице (по порядку).
Type of Operand 1 | Type of Operand 2 | Result |
---|---|---|
null or string | string | Convert null to "", numerical or lexical comparison |
bool or null | anything | Convert both sides to bool, false < true |
object | object | Built-in classes can define its own comparison, different classes are uncomparable, same class see Object Comparison |
string, resource, int or float | string, resource, int or float | Translate strings and resources to numbers, usual math |
array | array | Array with fewer members is smaller, if key from operand 1 is not found in operand 2 then arrays are uncomparable, otherwise - compare value by value (see following example) |
object | anything | object is always greater |
array | anything | array is always greater |
Пример #1 Сравнение логического значения и нуля
<?php
// Bool and null are compared as bool always
var_dump(1 == TRUE); // TRUE - same as (bool)1 == TRUE
var_dump(0 == FALSE); // TRUE - same as (bool)0 == FALSE
var_dump(100 < TRUE); // FALSE - same as (bool)100 < TRUE
var_dump(-10 < FALSE);// FALSE - same as (bool)-10 < FALSE
var_dump(min(-100, -10, NULL, 10, 100)); // NULL - (bool)NULL < (bool)-100 is FALSE < TRUE
?>
Пример #2 Транскрипция сравнения стандартных массивов
<?php
// Arrays are compared like this with standard comparison operators as well as the spaceship operator.
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 1;
} elseif ($val < $op2[$key]) {
return -1;
} elseif ($val > $op2[$key]) {
return 1;
}
}
return 0; // $op1 == $op2
}
?>
0 комментариев