php-老实说,我不知道如何制定这个通过引用的难题
作者:互联网
所以这是我看到的这段代码在做的事情:
>制作一个数组
>循环重复10次
>创建一个新的数组
>对这个新数组的引用保存在第一个数组中
> 10个数组现在驻留在原始数组中,其值分别为0、1、2、3 …
实际发生的情况:
> WTF?
码:
<?php
header('Content-type: text/plain');
$arrays = array();
foreach(range(0, 10) as $i)
{
$arr = array();
$arr[0] = $i;
$arrays[] = &$arr;
}
print_r($arrays);
输出:
Array
(
[0] => Array
(
[0] => 10
)
[1] => Array
(
[0] => 10
)
[2] => Array
(
[0] => 10
)
[3] => Array
(
[0] => 10
)
[4] => Array
(
[0] => 10
)
[5] => Array
(
[0] => 10
)
[6] => Array
(
[0] => 10
)
[7] => Array
(
[0] => 10
)
[8] => Array
(
[0] => 10
)
[9] => Array
(
[0] => 10
)
[10] => Array
(
[0] => 10
)
)
我想确切地知道为什么显然只有第十个数组被引用了十次,而不是每个数组实例都被引用了一次.
另外,如果像我这样不只是在想WTF的人想编辑标题,请随时这样做.
解决方法:
线
$arr = array();
不会创建新数组,而是将一个空数组分配给已经存在的引用.
如果希望变量名“指向”内存中的另一个数组,则必须先对其进行unset()(或“ disconnect”),然后再为其分配一个空数组:
foreach(range(0, 10) as $i)
{
unset($arr);
$arr = array();
$arr[0] = $i;
$arrays[] = &$arr;
}
这是因为唯一可以使变量指向其他内容的操作是引用赋值(=&)和unset().
标签:pass-by-reference,arrays,php 来源: https://codeday.me/bug/20191201/2081686.html