php foreach引用赋值
2024-10-19 03:33:42
在写代码时发现php foreach引用赋值会导致意外的行为。
代码示例:
<?php
$arr = array('a','b','c');
foreach($arr as $k=>&$v)
{
}
print_r($arr); foreach($arr as $k=>$v)
{
}
print_r($arr);
?>
输出结果:
Array ( [0] => a [1] => b [2] => c ) Array ( [0] => a [1] => b [2] => b )
经过查找资料,找到原因。其实,第一个foreach结束后,数组$arr最后一个元素$v的引用仍然保留。在进行第二个foreach循环时,实际上是对数组$arr的第三个元素的三次赋第二个foreach开始执行时,每次数组$arr的变化如下:
第一次: Array ( [0] => a [1] => b [2] => a )
第二次: Array ( [0] => a [1] => b [2] => b )
第三次: Array ( [0] => a [1] => b [2] => b )
所以会有最后的输出结果。
为了避免这种情况,可以在第一个foreach结束后,取消掉引用:unset($v)。但是,为了避免不可预期的结果出现,慎用foreach引用赋值。
最新文章
- 解决java.io.IOException: HTTPS hostname wrong: should be
- HID USB设备开发技术【转】
- UML分析与设计
- 【转】[慢查优化]联表查询注意谁是驱动表 &; 你搞不清楚谁join谁更好时请放手让mysql自行判定
- servlet核心API的UML图
- 求斐波那契数列的第n项
- C语言双向链表
- python/ Django之中间件
- Snakes 的 Na&#239;ve Graph
- 简述iproute家族命令
- 路由网关---zuul
- JS垃圾收集机制
- JS应用实例4:表格隔行换色
- 如何搭一个vue项目
- 每日英语:Hold On: Reasons For Never Giving Up Your Dream
- 应用程序挂起、复原与终止— IOS开发
- Ubuntu下如何修改文件或者文件夹的权限
- CNBlog客户端--第一阶段记录
- jQuery 移除绑定事件
- FPGA 日积月累