PHP中使用foreach引用需要注意的问题

简介:

本文目的

今天在写项目时,发现php foreach语句中使用引用会出现奇特现象,故此记录此现象,原因和解决方法。希望对其他人有帮助!

现象

猜猜下面的代码会输出什么?

1
2
3
4
5
6
7
8
<?php
$a = array(1=> 'one' , 2=> 'two' );
 
foreach ($a as $key => &$val) {} //  do  nothing
var_dump($a);
  
foreach ($a as $key => $val) {} //  do  nothing
var_dump($a);

如果没有遇到过类似的问题,肯定会对结果大惊!如下图

image001.jpg

我勒个去,怎么修改了数组,代码中没有任何显示修改数组的操作呀!

 

原因

在foreach中使用了引用,&$val,这个值并没有在第一个foreach退出后自动清空,而是保留在内容中,当进入第二个foreach时,仍然可以访问到$val。所以,在第二个foreach的第一次循环时,实际上已经修改了$a[1]的值。第二次循环时,值保持不变。

解决方案

第一次循环退出后,unset这个临时变量$val,如下代码所示:

1
2
3
4
5
6
7
8
9
<?php
$a = array(1=> 'one' , 2=> 'two' );
  
foreach ($a as $key => &$val) {} //  do  nothing
unset ($val); //  important!
var_dump($a);
 
foreach ($a as $key => $val) {} //  do  nothing
var_dump($a);

输出结果如下:

image002.jpg

 

参考资料

声明:如有转载本博文章,请注明出处。您的支持是我的动力!文章部分内容来自互联网,本人不负任何法律责任。
本文转自bourneli博客园博客,原文链接:http://www.cnblogs.com/bourneli/archive/2012/10/29/2745130.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
PHP 数据库 索引
PHP中的for循环和forEach循环
PHP中的for循环和forEach循环
|
7月前
|
PHP Windows
PHP 中 for 循环和 foreach 循环的性能和可读性
PHP 中 for 循环和 foreach 循环的性能和可读性
|
10月前
|
XML NoSQL PHP
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
137 0
|
11月前
|
PHP
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
101 0
|
JSON 关系型数据库 MySQL
PHP用foreach循环读取json数据的方法
PHP用foreach循环读取json数据的方法
466 0
PHP用foreach循环读取json数据的方法
|
PHP
PHP使用foreach修改数组里边的值方案
PHP使用foreach修改数组里边的值方案
85 0
|
PHP
PHP foreach遍历数组(多种方式)
PHP foreach遍历数组(多种方式)
142 0
PHP foreach遍历数组(多种方式)
|
PHP
【从入门到放弃-PHP】foreach 引用的坑
背景描述 先看一段代码。 $arr = [ 'jack' => '20', 'tom' => '21', 'marry' => '54', 'less' => '23' ]; foreach ($arr as &$val) { echo $val; .
1864 0
|
PHP 人工智能
***PHP 遍历数组的方法foreach
foreach  http://php.net/manual/zh/control-structures.foreach.php (PHP 4, PHP 5) foreach 语法结构提供了遍历数组的简单方式。
994 0

相关产品

  • 云迁移中心