3

我正在阅读有关 php 的内容,它说,

==是等式,如果$a == $b和具有相同的元素。true$a$b

===是身份,如果$a === $b和具有相同的元素,具有相同的类型,以相同的顺序。true$a$b

所以,我想我会尝试自己看看差异,并用这个小脚本编写:

$a = array(1, 2, 3);
$b = array(2, 3, 1);
if ($a==$b) {echo "yeehaw!";} else {echo "nope";}
if ($a===$b) {echo "yup";} else {echo "nope";}

我的想法是两个数组相等不需要相同的顺序。但是,当我运行它时,我得到了“nope”和“nope”。

有什么区别?

4

6 回答 6

5

文档[PHP.net]说:

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

由于您的两个数组的顺序不同1,因此它们没有相同的键值对。

var_dump($a);
array(3) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
}
var_dump($b);
array(3) { 
    [0]=> int(2) 
    [1]=> int(3) 
    [2]=> int(1) 
}

1关于它们的构造 via array(),它将索引从 0 开始的参数。

于 2013-07-14T09:11:34.040 回答
5

您提供的数组具有相同的值集,但键值对不同。

请尝试以下用例(相同的键值对以不同的顺序):

$a = array(0=>1, 1=>2, 2=>3);
$b = array(1=>2, 2=>3, 0=>1);

...以及以下用例(不同的数据类型):

$a = array(1, 2, 3);
$b = array('1', '2', '3');
于 2013-07-14T09:11:40.713 回答
4

我的想法是两个数组相等不需要相同的顺序。

为了清楚文档中相同键/值对的含义,让我们看一下实际的数组内容:

$a = array(
    0 => 1,
    1 => 2,
    2 => 3,
);
$b = array(
    0 => 2,
    1 => 3,
    2 => 1,
);

显然,这对是不同的。

那么那个“相同的顺序”呢?

为了说明这一点,让我们创建$b一些不同的:

$b => array(
    2 => 3,
    1 => 2,
    0 => 1,
);

等式将==得到满足,因为这对现在是相同的。但是,由于 PHP 中的数组是有序映射,因此对顺序的不同会导致===相等失败。

于 2013-07-14T09:21:04.933 回答
0

两个数组被认为是相同的===,如果:

  • 元素个数相同
  • 所有数据类型都相同
  • 所有元素的顺序相同
  • 每个数组都有相同的键值对
于 2013-07-14T09:13:47.760 回答
0

有什么区别?

两个数组之间的差异可能意味着不同的东西,所以这个问题通常最好通过使用符合您期望的数组的差异函数来回答。

在您的情况下,函数(可能)满足相等array_diff()性:

!array_diff($a, $b) && !array_diff($b, $a);

如果你说不,那不是我要找的,请查看重复的问题“PHP - 检查两个数组是否相等”我还在那里留下了一个扩展答案,显示了其他可能的差异以及如何测试这些差异'关心比较值而不是元素(它们是键/值对)。

于 2013-07-14T10:00:34.163 回答
-1

第一个失败是因为元素不同。第二个失败是因为元素不同,尽管类型相同。(两者应该相同)

于 2013-07-14T09:13:26.603 回答