1, "b" => 2); $y = array("b" => 1, "a" => 2); $xLessY = ($x $y); var_dump(-6ren">
gpt4 book ai didi

php - 在 PHP 中比较数组 - 有趣的行为

转载 作者:可可西里 更新时间:2023-11-01 13:28:50 24 4
gpt4 key购买 nike

第一个例子:

$x = array("a" => 1, "b" => 2); 
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);

结果:$xLessY = true,$xGreaterY = true

第二个例子:

$x = array("a" => 2, "b" => 1); 
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);

结果:$xLessY = false,$xGreaterY = false

根据 http://docs.php.net/manual/en/language.operators.comparison.php 上的文档:

if key from operand 1 is not found in operand 2 then arrays are uncomparable, otherwise - compare value by value

在我们的例子中,数组 $x 中的每个键都存在于数组 $y 中,因此 $x 和 $y 是可比较的。另请参阅文档中的示例:

// 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
}

这种行为真的很奇怪:$x 小于 $y 同时 $x 大于 $y(第一个例子),两个数组是可比较的。

我认为这是因为 php 总是从符号“<”的确定一侧开始进行比较。我的意思是:对于 ($x < $y) php 将 $x 作为操作数 1,对于 ($x > $y) 它将 $y 作为操作数 1。虽然我没有在文档中找到任何关于此行为的信息。
您对此有何看法?

最佳答案

你的假设是正确的。 >运算符被解析为

|   expr '>' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }

这基本上是说,X > Y相当于not X < Y ,当比较不可交换时,这当然是错误的。考虑在 bugs.php.net 上报告此问题。

关于php - 在 PHP 中比较数组 - 有趣的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com