脉脉上看到的一个关于 PHP 引用传值的问题,请教一下

2017-03-19 12:47:10 +08:00
 zhangjw152

$map = array(100,200,300); foreach ($map as &$k){} foreach ($map as $k){} print_r($map);

打印结果是 Array ( [0] => 100 [1] => 200 [2] => 200 ) 怎么回事?

1414 次点击
所在节点    问与答
4 条回复
sagaxu
2017-03-19 12:57:16 +08:00
foreach 持有引用,紧接着一定要写个 unset($k);,我都成条件反射了。

第一个 foreach 结束时,$k 是$map[2]的引用,

第二个 foreach 的第一轮,$map[2] = $map[0],也就是 100 ,此时[100, 200, 100]
第二轮$map[2]=$map[1],此时变成[100,200,200]
第三轮的时候,$map[2] = $map[2],不变
zhangjw152
2017-03-19 13:10:30 +08:00
@sagaxu 第三轮的时候,$map[2] = $map[2],不变,$map[2]不应该是 300 吗
sagaxu
2017-03-19 13:13:33 +08:00
@zhangjw152 第二轮的时候已经是[100,200,200]了,内存里没有 300 这个数了
zhangjw152
2017-03-19 13:16:30 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/348592

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX