根据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的数组相等性是否需要相同顺序的元素?
EDIT。发布的答案完美地回答了这个问题。可能的解决方法包括以下内容。虽然不是我原始问题的一部分,但是对于最佳实施方式的任何建议都将受到赞赏。
<?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 :(得分:4)
那是因为:
在第一个数组中:
0 => a
1 => b
在第二个数组中,它是:
0 => b
1 => a
所以values
和keys
是相同的,但不是pair
!
因此,如果更改第二个数组中的键,则为TRUE
,因为值和键与对相同:
$a1 = array('a','b');
$a2 = array( 1 =>'b', 0 =>'a');
echo(($a1==$a2)?'equal':'not equal');
输出:
equal
答案 1 :(得分:1)
这是一个很好的问题,但正如文档所提到的那样。它需要相同的键值对。您的第一个数组是1 => a
,第二个数组是2=>a
b相同。因此不相等。
一个例子是
$a=array('a'=>'a','b'=>'b');
$a=array('b=>'b','a'=>'a');