根据 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
所以values
和keys
是一样的,但不是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');