foreach 中的引用

今天遇到了PHP语言的一个坑,开始以为是PHP的bug,相关代码简化如下:

 1 <?php
 2 
 3 $ary = array('first', 'second', 'third');
 4 
 5 foreach ($ary as $k => &$v) {
 6 }
 7 
 8 foreach ($ary as $k => $v) {
 9 }
10 
11 var_dump($ary);

dump出来的结果让人百思不得其解:

1 array(3) {
2     [0]=>
3     string(5) "first"
4     [1]=>
5     string(6) "second"
6     [2]=>
7     &string(6) "second"
8 }

为什么最后一个元素的值与倒数第二个相等了,还多了一个引用符号。果然在手册里查到了这么一个相关的警告

说foreach循环结束后$v保存了最后一个元素的引用,但还是不清楚上面这种情况到底是怎么发生的,然后搜索相关资料,终于在这篇文章把这个问题说明白了References and foreach 

大概是这个意思:第一个foreach循环之后,$v保存了$ary最后一个元素的引用,所以在第二次foreach循环中,每一次循环对$v的赋值,其实是对$ary最后一个元素进行赋值,遍历整个数组,最后一个元素的值自然与倒数第二个元素相等。在var_dump结果中最有一个元素前有个'&'符号,表示该元素已被其他值引用,这里就是$v。

posted on 2014-03-24 21:40  helloxk  阅读(567)  评论(0)    收藏  举报

导航