数组与严格比较不匹配

时间:2017-06-10 00:21:59

标签: php arrays

$c1 = $v1 = array();
$v1['key'] = 'value';
echo '$c1 === $v1: ' . (($c1 === $v1) ? 'true' : 'false'); // prints false

$c1 === $v1是假的。但为什么?似乎$v1自动设置为不同的数组,然后自动设置为原始数组。为什么会这样?

最初$c$v1设置为相同的数组实例。因此,如果我变异$ v1,$c不会反映更改,因为它们被设置为相同的数组实例。

3 个答案:

答案 0 :(得分:4)

这些将不相同,因为您明确将它们设置为包含不同的值。第一个是空的,而第二个是值。

虽然它们没有设置为相同的引用,所以它们是两个不同的变量 - 当你这样做时

$c1 = $v1 = array();

您可以创建两个不同的数组。如果您希望更改一个数据以反映在两个数组中,则需要通过在变量标识符前使用&运算符使其成为引用,如此。

$v1 = array();
$c1 = &$v1; // $c1 is now a reference to $v1
$v1['key'] = 'value';
echo '$c1 === $v1: ' . (($c1 === $v1) ? 'true' : 'false'); // true!

请注意,您需要在之后引用它您想要引用的变量。

使用这样的引用时,它会双向进行 - 对$v1的任何更改都将应用于$c1,反之亦然。所以它们是不同的变量,但总是保持相同的值。

上例中的比较是正确的,因为数组完全相同 - 不仅仅是通过引用,而是因为它们具有相同的值和键。如果比较两个未引用的数组与完全相同的值完全相同的匹配键,那么你也会获得真正的相等。

var_dump(array('foo') === array('bar'));           // false; same keys, different values
var_dump(array('bar') === array('bar'));           // true;  same keys, same values
var_dump(array('bar') === array('baz' => 'bar'));  // false; different keys, same value

Live demo

答案 1 :(得分:0)

因为它们是两个不同的对象,有两个不同的引用,发生一个不会影响另一个。就这么简单。

答案 2 :(得分:0)

这些数组不会相同,因为第二个数组有一个值。请运行以下代码:

<ion-app [ngClass]="'blur-background'"></ion-app>