PHP 的数组相等性是否需要相同顺序的元素?


Does PHP's array equality require elements in the same order?

根据 http://php.net/manual/en/language.operators.array.php:

$a == $b    Equality    TRUE if $a and $b have the same key/value pairs.
$a === $b   Identity    TRUE if $a and $b have the same key/value pairs in the same order and of the same types.

因此,我本来希望这两个数组相等,但它们没有。

$a1=array('a','b');
$a2=array('b','a');
echo(($a1==$a2)?'equal':'not equal');

我可以先对数组进行排序,它们既有平等又有身份。

我是否误解了PHP手册?PHP 的数组相等性需要相同顺序的元素吗?

编辑。 张贴的答案完美地回答了这个问题。 可能的解决方法包括以下内容。 虽然不是我最初问题的一部分,但任何关于最佳实施方式的建议将不胜感激。

<?php
$a1=array('a','b');
$a2=array('b','a');
echo((($a1==$a2)?'equal':'not equal').'<br>');
echo(((array_diff($a1, $a2) === array_diff($a2, $a1))?'equal':'not equal').'<br>');
sort($a1);
sort($a2);
echo((($a1==$a2)?'equal':'not equal').'<br>');
?>

输出:

not equal
equal
equal

这是因为:

在第一个数组中,它是:

0 => a
1 => b

在第二个数组中,它是:

0 => b
1 => a

所以valueskeys是一样的,但不是pair

因此,如果您更改第二个数组中的键,则会TRUE,因为值和键与 pair 相同:

$a1 = array('a','b');
$a2 = array( 1 =>'b', 0 =>'a');
echo(($a1==$a2)?'equal':'not equal');

输出:

equal

这是一个很好的问题,但正如文档所提到的。它需要相同的键值对。您的第一个阵列是1 => a的,第二个是2=>a

与 b 相同。所以因此不相等。

一个例子是

$a=array('a'=>'a','b'=>'b');
$a=array('b=>'b','a'=>'a');