繁体   English   中英

php中的==和=== WRT数组之间的区别?

[英]Difference between == and === WRT arrays in php?

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

==是Equality,如果$a$b具有相同的元素,则$a == $btrue

===是Identity,如果$a$b具有相同的元素,相同的类型,以相同的顺序,则$a === $btrue

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

$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";}

我的想法是,两个数组相等并不需要相同的顺序。 然而,当我跑这个时,我得到了“不”和“不”。

有什么区别?

文档[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关于它们通过array()的构造,它将索引从0开始的参数。

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

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

$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');

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

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

$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中的数组是有序映射,因此对顺序的差异会导致===相等失败。

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

  • 元素数量是相同的
  • 所有数据类型都相同
  • 所有元素的顺序都相同
  • 每个数组都有相同的键值对

有什么区别?

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

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

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

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

第一个失败因为元素不同。 第二个失败,因为虽然类型相同,但元素不同。 (两者都应该相同)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM