$map = array(100,200,300); foreach ($map as &$k){} foreach ($map as $k){} print_r($map);
打印结果是 Array ( [0] => 100 [1] => 200 [2] => 200 ) 怎么回事?
1
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],不变 |
2
zhangjw152 OP @sagaxu 第三轮的时候,$map[2] = $map[2],不变,$map[2]不应该是 300 吗
|
3
sagaxu 2017-03-19 13:13:33 +08:00 1
@zhangjw152 第二轮的时候已经是[100,200,200]了,内存里没有 300 这个数了
|
4
zhangjw152 OP @sagaxu 欧了 明白了,刚才在 stack 上也看了看,和你说的一样 http://stackoverflow.com/questions/8220399/php-foreach-pass-by-reference-last-element-duplicating-bug/8220457#8220457
|