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

Mic*_*luk 3 php arrays identity equality

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

==是平等使得$a == $btrue如果$a$b具有相同的元件.

===是身份使得$a === $btrue如果$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";}
Run Code Online (Sandbox Code Playgroud)

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

有什么不同?

pha*_*t0m 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.
Run Code Online (Sandbox Code Playgroud)

因为你的两个数组不是以相同的顺序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) 
}
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*rov 5

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

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

$a = array(0=>1, 1=>2, 2=>3);
$b = array(1=>2, 2=>3, 0=>1);
Run Code Online (Sandbox Code Playgroud)

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

$a = array(1, 2, 3);
$b = array('1', '2', '3');
Run Code Online (Sandbox Code Playgroud)