php foreach 意外情况简述

尊重程序员->本文原创->文章参考:

【1】http://www.jb51.net/article/39299.htm

【2】http://www.php-note.com/article/detail/245


    关于本文中介绍到的foreach的坑,以前没有注意过,因为一般没有这么使用。直到偶尔有一天看到了一篇关于php常见问题的文章,才了解到了这个坑。读完本文后,如果需要更深入的学习,可以阅读参考文章。里面介绍了更底层的知识。

    先上一个demo

<?php 

	$arr = array("A","B","C","D");
	$m = "";
	foreach ($arr as $k => &$v){
		$m.=$v;
	}
	echo "第一组:".$m."<br/>";


	$n = "";
	foreach ($arr as $k => $v){
		$n .=$v;
	}
	echo "第一组:".$n;
?>

结果是什么?我们注意到第一个foreach 键指向了一个带有'&'符号的值,这里,就是我们需要注意到的坑

上面的demo输出的结果是:

第一组:ABCD
第一组:ABCC


为什么会是这样呢?一定是因为“&”他导致的。那么他又是怎么作用我们的输出的呢

我们来看第一次遍历,$arr 对 $v 的作用



注意,第一个foreach结束后,因为未对里面使用过的变量做任何处理,所以,$v仍然是$arr[3]的引用。

那么在进入第二个foreach流程之前,我们先看一下在PHP当中,变量的引用怎么理解呢?【详细内容请戳 http://www.php-note.com/article/detail/245】

不同的名字访问同一个变量内容

好,这句话如何理解?让我们看下面的一个小例子:

<?php 
$a = "abc";
$b = &$a;
echo "b:".$b."<br>";
$b = "ccc";
echo  "a:".$a;
?>

输出结果为:

b:abc
a:ccc

现在,我们带着对引用的理解,进入第二个foreach


因为在第三次遍历时,$arr[3]被赋值C,所以第四次遍历时,$v = $arr[3] = C


以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值