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 ,如需转载请自行联系原作者
相关文章
|
7月前
|
PHP
php的foreach神操作
php的foreach神操作
45 0
|
6月前
|
存储 安全 关系型数据库
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
|
7月前
|
PHP
PHP反序列化--引用
PHP反序列化--引用
|
PHP
PHP实现自制随机图片API- 调用文件夹和引用网络图片
PHP实现随机图片API- 调用文件夹和引用网络图片
213 0
|
PHP
今天遇到有趣的php引用题目
今天遇到有趣的php引用题目
35 0
|
PHP Python
关于python变量的再次折腾,没有PHP的引用赋值
今天,重看php文档的时候,发现了这样的讲法
40 0
|
数据库连接 PHP 数据库
PHP的引用操作符& 的使用及注意事项
PHP的引用操作符& 的使用及注意事项
|
PHP 数据库 索引
PHP中的for循环和forEach循环
PHP中的for循环和forEach循环
|
PHP Windows
PHP 中 for 循环和 foreach 循环的性能和可读性
PHP 中 for 循环和 foreach 循环的性能和可读性
126 1
|
PHP
【PHP】foreach 引用赋值
php foreach 引用赋值,在使用过程中需要及时释放引用变量,防止出现使用时变量污染。
184 1