问题是当执行以下代码时会打印什么?
我的回答是:
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>";
我可能错过了一些令人尴尬的东西,但似乎无法弄明白。提前谢谢!
答案 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!!!
中阅读更多关于&符号的信息