Operadores para comparaciones PHP

Los operadores de comparación, como su nombre lo indica, permiten comparar dos valores. Puede también estar interesado en ver las tablas de comparación de tipos, ya que muestran ejemplos de las varias comparaciones relacionadas con tipos.
Operadores de comparación
EjemploNombreResultado
$a == $bIgualTRUE si $a es igual a $b después de la manipulación de tipos.
$a === $bIdénticoTRUE si $a es igual a $b, y son del mismo tipo.
$a != $bDiferenteTRUE si $a no es igual a $b después de la manipulación de tipos.
$a <> $bDiferenteTRUE si $a no es igual a $b después de la manipulación de tipos.
$a !== $bNo idénticoTRUE si $a no es igual a $b, o si no son del mismo tipo.
$a < $bMenor queTRUE si $a es estrictamente menor que $b.
$a > $bMayor queTRUE si $a es estrictamente mayor que $b.
$a <= $bMenor o igual queTRUE si $a es menor o igual que $b.
$a >= $bMayor o igual queTRUE si $a es mayor o igual que $b.
$a <=> $bNave espacialUn integer menor que, igual a, o mayor que cero cuando $a es respectivamente menor que, igual a, o mayor que $b. Disponible a partir de PHP 7.
$a ?? $b ?? $cFusión de nullEl primer operando de izquierda a derecha que exista y no sea NULLNULL si no hay valores definidos y no son NULL. Disponible a partir de PHP 7.
Si se compara un número con un string o la comparación implica strings numéricos, entonces cada string esconvertido en un número y la comparación realizada numéricamente. Estas reglas también se aplican a la sentencia switch. La conversión de tipo no tiene lugar cuando la comparación es === o !== ya que esto involucra comparar el tipo así como el valor.
<?php
var_dump
(== "a"); // 0 == 0 -> truevar_dump("1" == "01"); // 1 == 1 -> truevar_dump("10" == "1e1"); // 10 == 10 -> truevar_dump(100 == "1e2"); // 100 == 100 -> true
switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// nunca alcanzado debido a que "a" ya ha coincidido con 0
    
echo "a";
    break;
}
?>
<?php  // Integersecho <=> 1// 0echo <=> 2// -1echo <=> 1// 1

// Floats
echo 1.5 <=> 1.5// 0echo 1.5 <=> 2.5// -1echo 2.5 <=> 1.5// 1

// Strings
echo "a" <=> "a"// 0echo "a" <=> "b"// -1echo "b" <=> "a"// 1
 
echo "a" <=> "aa"// -1echo "zz" <=> "aa"// 1

// Arrays
echo [] <=> []; // 0echo [123] <=> [123]; // 0echo [123] <=> []; // 1echo [123] <=> [121]; // 1echo [123] <=> [124]; // -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
?>
Para varios tipos, la comparación se realiza de acuerdo a la siguiente tabla (en orden).
La comparación con varios tipos
Tipo de operando 1Tipo de operando 2Resultado
null o stringstringConvierte NULL en "", comparación numérica o léxica
bool o nullcualquieraConvierte ambos lados a boolFALSE < TRUE
objectobjectLas clases internas pueden definir su propia comparación, diferentes clases son incomparables, la misma clase - comparan propiedades en la misma forma que los arrays (PHP 4), PHP 5 tiene su propia explicación
stringresourcenumberstringresource o numberTraducir las cadenas y recursos a números, matemática usual
arrayarrayUn array con menos elementos es menor, si una clave del operando 1 no se encuentra en el operando 2 entonces los arrays son incomparables, de otra forma - compara valor por valor (ver el siguiente ejemplo)
objectcualquieraobject es siempre mayor
arraycualquieraarray es siempre mayor
Ejemplo #1 Comparación boolean/null
<?php// Booleanos y null son comparados siempre coomo boolvar_dump(== TRUE);  // TRUE - same as (bool)1 == TRUEvar_dump(== FALSE); // TRUE - same as (bool)0 == FALSEvar_dump(100 TRUE); // FALSE - same as (bool)100 < TRUEvar_dump(-10 FALSE);// FALSE - same as (bool)-10 < FALSEvar_dump(min(-100, -10NULL10100)); // NULL - (bool)NULL < (bool)-100 is FALSE < TRUE?>
Ejemplo #2 Transcripción de la comparación estándar de arrays
<?php// Arrays son comparados de esta forma con los operadores de comparación estándarfunction 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}?>

COMPARTIR

Publicaciones Relacionadas

Anterior
Siguiente »