Php 与严格比较不匹配的数组
Php 与严格比较不匹配的数组,php,arrays,Php,Arrays,$c1==$v1为false。但是为什么呢?似乎$v1会自动设置为不同的数组,然后自动设置为原始数组。为什么会这样 最初,$c和$v1被设置为相同的数组实例。因此,如果我对$v1进行变异,$c不应反映更改,因为它们被设置为相同的数组实例。这些将不相同,因为您显式地将它们设置为包含不同的值。第一个为空,而第二个保存值 但是,它们并没有设置为相同的引用,所以它们是两个不同的变量——当您设置时 $c1 = $v1 = array(); $v1['key'] = 'value'; echo '$c1 =
$c1==$v1
为false。但是为什么呢?似乎$v1
会自动设置为不同的数组,然后自动设置为原始数组。为什么会这样
最初,
$c
和$v1
被设置为相同的数组实例。因此,如果我对$v1进行变异,$c
不应反映更改,因为它们被设置为相同的数组实例。这些将不相同,因为您显式地将它们设置为包含不同的值。第一个为空,而第二个保存值
但是,它们并没有设置为相同的引用,所以它们是两个不同的变量——当您设置时
$c1 = $v1 = array();
$v1['key'] = 'value';
echo '$c1 === $v1: ' . (($c1 === $v1) ? 'true' : 'false'); // prints false
您可以创建两个不同的数组。如果希望在两个数组中都反映其中一个的更改,则需要使用变量标识符前面的&
运算符将其作为引用,如下所示
$c1 = $v1 = array();
请注意,您需要在创建希望引用的变量之后引用它
当使用这样的引用时,它是双向的-对$v1
的任何更改都将应用于$c1
,反之亦然。因此,它们是不同的变量,但始终保持相同的值
上面例子中的比较是正确的,因为数组是完全相同的——不仅仅是通过引用,还因为它们拥有相同的值和键。如果比较两个具有完全相同的值和完全相同的匹配键的非引用数组,也会得到一个真正的等式
$v1 = array();
$c1 = &$v1; // $c1 is now a reference to $v1
$v1['key'] = 'value';
echo '$c1 === $v1: ' . (($c1 === $v1) ? 'true' : 'false'); // true!
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
为什么它应该相等<代码>[]==['key'=>'value']
您分配了$v1
一个值,另一个值为空。所以数组不匹配。你到底想实现什么?检查两者是否都是阵列?检查它们是否是相等的数组(它们不是)。您混淆了按值赋值和按引用赋值。在您的作业中$c1
!=<代码>第1行后面的$v1。请看@sohan我冒昧地更改了你问题的标题。“Bizzare PHP问题”不是很有帮助,也不是很有描述性——请随意将其更改为更合适的内容!
<?php
$a = $b = [];
print_r($a);
print_r($b);
$result = ($a === $b) ? 1 : 0;
// The reasult will be 1 because the arrays are both empty.
print_r($result);
$b[0] = 'Ravi';
print_r($a);
print_r($b);
$result = ($a === $b) ? 1 : 0;
// The result will be 0 because the arrays are different.
print_r($result);