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

时间:2014-12-06 12:31:28

标签: php arrays

根据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

2 个答案:

答案 0 :(得分:4)

那是因为:

在第一个数组中:

0 => a
1 => b

在第二个数组中,它是:

0 => b
1 => a

所以valueskeys是相同的,但不是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');