🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 比较运算符 比较运算符,如同它们名称所暗示的,允许对两个值进行比较。还可以参考 [PHP 类型比较表](http://php.net/manual/zh/types.comparisons.php)看不同类型相互比较的例子。 **比较运算符** | 例子 | 名称 | 结果 | | --- | --- | --- | | $a == $b | 等于 | **`TRUE`**,如果类型转换后 $a 等于 $b。 | | $a === $b | 全等 | **`TRUE`**,如果 $a 等于 $b,并且它们的类型也相同。 | | $a != $b | 不等 | **`TRUE`**,如果类型转换后 $a 不等于 $b。 | | $a <> $b | 不等 | **`TRUE`**,如果类型转换后 $a 不等于 $b。 | | $a !== $b | 不全等 | **`TRUE`**,如果 $a 不等于 $b,或者它们的类型不同。 | | $a < $b | 小与 | **`TRUE`**,如果 $a 严格小于 $b。 | | $a > $b | 大于 | **`TRUE`**,如果 $a 严格大于 $b。 | | $a <= $b | 小于等于 | **`TRUE`**,如果 $a 小于或者等于 $b。 | | $a >= $b | 大于等于 | **`TRUE`**,如果 $a 大于或者等于 $b。 | | $a <=> $b | 太空船运算符(组合比较符) | 当$a小于、等于、大于$b时 分别返回一个小于、等于、大于0的[integer](http://php.net/manual/zh/language.types.integer.php) 值。 PHP7开始提供. | | $a ?? $b ?? $c | NULL 合并操作符 | 从左往右第一个存在且不为 **`NULL`** 的操作数。如果都没有定义且不为 **`NULL`**,则返回 **`NULL`**。PHP7开始提供。 | 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被[转换为数值](http://php.net/manual/zh/language.types.string.php#language.types.string.conversion)并且比较按照数值来进行。此规则也适用于 [switch](http://php.net/manual/zh/control-structures.switch.php) 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。 ``` <?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";     break; case "a": // never reached because "a" is already matched with 0     echo "a";     break; } ?> ``` ``` <?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   // only values are compared $a = (object) ["a" => "b"];  $b = (object) ["b" => "b"];  echo $a <=> $b; // 1 ?> ``` 对于多种类型,比较运算符根据下表比较(按顺序)。 **比较多种类型** | 运算数 1 类型 | 运算数 2 类型 | 结果 | | --- | --- | --- | | [null](http://php.net/manual/zh/language.types.null.php) 或 [string](http://php.net/manual/zh/language.types.string.php) | [string](http://php.net/manual/zh/language.types.string.php) | 将 **`NULL`** 转换为 "",进行数字或词汇比较 | | [bool](http://php.net/manual/zh/language.types.boolean.php) 或 [null](http://php.net/manual/zh/language.types.null.php) | 任何其它类型 | 转换为 [bool](http://php.net/manual/zh/language.types.boolean.php),**`FALSE`** < **`TRUE`** | | [object](http://php.net/manual/zh/language.types.object.php) | [object](http://php.net/manual/zh/language.types.object.php) | 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的[说明](http://php.net/manual/zh/language.oop5.object-comparison.php) | | [string](http://php.net/manual/zh/language.types.string.php),[resource](http://php.net/manual/zh/language.types.resource.php) 或 [number](http://php.net/manual/zh/language.pseudo-types.php#language.types.number) | [string](http://php.net/manual/zh/language.types.string.php),[resource](http://php.net/manual/zh/language.types.resource.php) 或 [number](http://php.net/manual/zh/language.pseudo-types.php#language.types.number) | 将字符串和资源转换成数字,按普通数学比较 | | [array](http://php.net/manual/zh/language.types.array.php) | [array](http://php.net/manual/zh/language.types.array.php) | 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) | | [object](http://php.net/manual/zh/language.types.object.php) | 任何其它类型 | [object](http://php.net/manual/zh/language.types.object.php) 总是更大 | | [array](http://php.net/manual/zh/language.types.array.php) | 任何其它类型 | [array](http://php.net/manual/zh/language.types.array.php) 总是更大 | **Example #1 标准数组比较代码** ``` <?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 } ?> ```