gpt4 book ai didi

php - 数组与严格比较不匹配

转载 作者:可可西里 更新时间:2023-11-01 00:55:49 24 4
gpt4 key购买 nike

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

$c1 === $v1 为假。但为什么?似乎 $v1 自动设置为另一个数组,然后自动设置为原始数组。为什么会这样?

最初 $c$v1 被设置为同一个数组实例。因此,如果我改变 $v1,$c 不应反射(reflect)更改,因为它们被设置为相同的数组实例。

最佳答案

这些不会相同,因为您明确设置它们以保存不同的值。第一个是空的,而第二个保存值。

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

$c1 = $v1 = array();

您创建了两个不同的数组。如果您希望其中一个的更改反射(reflect)在两个数组中,则需要通过在变量标识符前面使用 & 运算符来使其成为引用,就像这样。

$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

关于php - 数组与严格比较不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com