El primer ejemplo:matrices que comparan en PHP - comportamiento interesante
$x = array("a" => 1, "b" => 2);
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
Resultado: $ xLessY = cierto, $ xGreaterY = cierto
El segundo ejemplo:
$x = array("a" => 2, "b" => 1);
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
Resultado: $ xLessY = falsa, $ xGreaterY = falsa
De acuerdo con la documentación sobre http://docs.php.net/manual/en/language.operators.comparison.php:
si la clave del operando 1 no se encuentra en operando 2 a continuación, las matrices son incomparable de lo contrario, - comparar valor por valor
en nuestro caso cada tecla del array $ x está presente en matriz $ y, por lo $ x $ y y son los cultivable. Véase también el ejemplo de la documentación:
// Arrays are compared like this with standard comparison operators
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
}
Este comportamiento es muy extraño: $ x es menor que $ yy al mismo tiempo, $ x es mayor que $ y (el primer ejemplo), y dos conjuntos son comparables .
Creo que esto es porque php siempre se compara comenzando desde el lado definido del signo '<'. Quiero decir: para ($ x < $ y) php toma $ x como operando 1, para ($ x> $ y) lleva $ y como operando 1. Aunque no encontré nada sobre este comportamiento en la documentación.
¿Qué piensas sobre esto?
Sospecho que es posible que tenga razón acerca de cómo se usa el primer valor en el extremo puntiagudo de '<' como primer operando. Por supuesto, puede encontrar la respuesta con seguridad si mira el código fuente de PHP ... –