gpt4 book ai didi

php - 我 honeSTLy 不知道如何制定这个按引用传递的难题

转载 作者:搜寻专家 更新时间:2023-10-31 20:49:20 25 4
gpt4 key购买 nike

所以这是我看到这段代码的作用:

  • 制作了一个数组
  • 一个循环迭代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
)

)

我想确切地知道为什么只有第 10 个数组被引用了 10 次,而不是数组的每个实例都被引用了 10 次。

此外,如果不只是想 WTF 的人(比如我)想要编辑标题,请随时这样做。

最佳答案

线

$arr = array();

不创建新数组,而是将空数组分配给已存在的引用。如果您希望变量名称“指向”内存中的不同数组,您必须先unset()(或“断开连接”)它,然后再分配一个空数组对它:

foreach(range(0, 10) as $i)
{
unset($arr);
$arr = array();
$arr[0] = $i;

$arrays[] = &$arr;
}

这是因为唯一可以使变量指向其他对象的操作是引用赋值 (=&) 和 unset()

关于php - 我 honeSTLy 不知道如何制定这个按引用传递的难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887933/

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