PHP:引用其他数组的数组(无意)

时间:2018-06-05 10:47:28

标签: php arrays

问题是当执行以下代码时会打印什么?

我的回答是:

arr[0]=1 and arr2[0]=2

但显然,没有。在执行期间看到,答案似乎是arr [0] = 2和arr2 [0] = 2。现在,这让我感到困惑 - 为什么arr[0]会是2,如果它甚至没有被引用,那么在arr2[0]被修改时不应该更改?

$a = 1;
$arr = array(1);
$a = &$arr[0]; //$a=1
$arr2 = $arr;
$arr2[0]++; //$arr2[0]=2
echo "arr[0]=".$arr[0]. "<br>";
echo "arr2[0]=".$arr2[0]. "<br>";

我可能错过了一些令人尴尬的东西,但似乎无法弄明白。提前谢谢!

2 个答案:

答案 0 :(得分:0)

通过此作业$a = &$arr[0];,您已在$ arr中创建了引用。然后将此引用复制到$ arr2。如果你致电var_dump($arr, $arr2);,你会发现第一个元素是两个数组中的引用。

这个案例在php.net的this comment中得到了很好的描述。

答案 1 :(得分:0)

<?php
$a = 1;
$arr = array(1);
$a = $arr[0]; //$a=1
$arr2 = $arr;
$arr2[0]++; //$arr2[0]=2
echo "arr[0]=".$arr[0]. "<br>";
echo "arr2[0]=".$arr2[0]. "<br>";

删除&amp;来自$a = &$arr[0];,您将获得预期的结果

在php Here!!!

中阅读更多关于&符号的信息