Pierwszy przykład:porównujące tablice w PHP - ciekawe zachowanie
$x = array("a" => 1, "b" => 2);
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
Wynik: $ xLessY = prawda, $ xGreaterY = prawda
Drugi przykład:
$x = array("a" => 2, "b" => 1);
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
: $ xLessY = fałszywe, $ xGreaterY = fałszywe
Według dokumentacji na http://docs.php.net/manual/en/language.operators.comparison.php:
jeśli klucz od argumentu 1 nie znajduje się w argumencie 2 ówczesnego tablice są nieporównywalne, inaczej - porównaj wartość przez wartość
W naszym przypadku każdy klucz z tablicy $ x jest obecny w tablicy $ y, więc $ x i $ y są comp orny. Zobacz także przykład z dokumentacją:
// 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
}
Takie zachowanie jest bardzo dziwne: $ x jest mniejsze niż $ y i zarazem $ x jest większe niż $ y (pierwszy przykład) i dwie tablice są porównywalne .
Myślę, że to dlatego, że php zawsze porównuje zaczynając od jednej określonej strony znaku "<". Mam na myśli: dla ($ x < $ y) php bierze $ x jako operand 1, dla ($ x> $ y) zajmuje $ y jako operand 1. Chociaż nie znalazłem nic o tym zachowaniu w dokumentacji.
Co sądzisz o tym?
Podejrzewam, że możesz mieć rację co do tego, jaka wartość na spiczastym końcu '<' zostanie użyta jako pierwszy operand. Oczywiście można znaleźć odpowiedź na pewno, jeśli spojrzysz na kod źródłowy PHP ... –