我正在阅读关于php的内容,它说,
==
是平等,如果$a == $b
和true
具有相同的元素,则$a
为$b
。
===
是Identity,$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";}
{{1}} {{1}} {{1}} {{1}} {{1}} {{1}}
所以,我想我会尝试看看自己的差异并用这个小脚本写下来:
{{1}}
我的想法是两个数组不相同,不需要相同的顺序。然而,当我跑这个时,我得到了“不”和“不”。
有什么区别?
答案 0 :(得分:5)
== 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开头的参数。
答案 1 :(得分: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');
答案 2 :(得分:4)
我的想法是两个数组不相同也不需要相同的顺序。
为了清楚documentation对相同键/值对的含义,让我们看一下实际的数组内容:
$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中的数组是有序映射,所以对顺序的差异会导致===
相等失败。
答案 3 :(得分:0)
如果符合以下情况,则两个数组被视为相同===
答案 4 :(得分:0)
有什么区别?
两个数组之间的差异可能意味着不同的东西,所以通常使用符合您期望的数组的差异函数来解决这个问题。
在您的情况下,array_diff()
函数(可能)满足相等性:
!array_diff($a, $b) && !array_diff($b, $a);
如果您拒绝,那不是我想要的,请查看重复的问题"PHP - Check if two arrays are equal"我还留下了an extended answer there,其中显示了其他可能的差异,以及如何测试这些问题。关注比较值而不是元素(键/值对)。
答案 5 :(得分:-1)
第一个因为元素不同而失败。第二个失败,因为虽然类型相同,但元素不同。 (两者都应该相同)