所以这是我看到的这段代码在做的事情:
>制作一个数组
>循环重复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().
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。