php的循环与引用的一个坑,php循环引用

上代码

$arr = array('a'=> 'a11',

'b'=> 'b22',

'c'=> 'c33',);foreach ($arr as $k=>&$v){//Do somethind

}foreach ($arr as $k=>$v){var_dump($v);

}

这样的代码, var_dump 会输出什么? 各位可以试试, 答案

string(3) "a11"

string(3) "b22"

string(3) "b22"

结果里, 第三行变成了 key='b' 的value. 问题就出在第一个循环的引用.

今天就踩到了一个这样的坑, 查问题用了很久. 简单来说, foreach循环使用的引用, 循环结束后有所保留. php.com 着重写了:

Warning

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

对于上面这个例子, 第一个循环结束后, $v引用仍然存在. 由于两个循环的变量命名一致, 第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了

前一个元素的值.

原理很简单, 文档写的明明白白. 但如果工作中遇到相关的bug是很坑的, 定位需要很久. 还得需要写码的时候就注意:

1. 减少引用的使用

2. 如果需要在foreah使用引用, 应该用函数将封装起来

http://www.bkjia.com/PHPjc/1098446.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1098446.htmlTechArticlephp的循环与引用的一个坑,php循环引用 上代码 $arr = array ( 'a'= 'a11', 'b'= 'b22', 'c'= 'c33', ); foreach ( $arr as $k = $v ){ // Do somethind } foreach ( $arr as...

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

PHP两文件嵌套循环引用,php的循环与引用的一个坑,php循环引用_PHP教程相关推荐

  1. python两层循环 循环完整体一个_Python编写循环的两个建议 | 鹅厂实战(文末有福利)...

    循环是一种常用的程序控制结构.我们常说,机器相比人类的最大优点之一,就是机器可以不眠不休的重复做某件事情,但人却不行.而**"循环"**,则是实现让机器不断重复工作的关键概念. 在 ...

  2. C++ 基础 : 函数重载、引用、内联函数、auto、范围for循环

    函数重载 引用 内联函数 auto 范围for循环 函数重载 C++中引入了一个新特性,函数重载. 在同一个作用域下,对于相同的函数名,函数的参数不同,不同类型的参数顺序不同,参数的个数不同,都可以形 ...

  3. for循环如果先--_乐字节Java循环:循环控制和嵌套循环

    乐字节小乐上次讲完了Java反射,接下来小乐给大家讲述Java循环. 循环有以下四部分: Java循环 一.循环控制 1. do..while 直到型 ( 先执行后判断) ,结构为: 先执行循环体,后 ...

  4. 互相引用 spring_听说你还不知道Spring是如何解决循环依赖问题的?

    作者:Vt 前言 Spring如何解决的循环依赖,是近两年流行起来的一道Java面试题. 其实笔者本人对这类框架源码题还是持一定的怀疑态度的. 如果笔者作为面试官,可能会问一些诸如"如果注入 ...

  5. matlab在循环中保存jpg格式_Matlab如何循环读取文件

    循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能, %如果图片是其它路径,可以用 ["路径& ...

  6. 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解

    数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留.建议使用 unset() 来将其销毁. Note: foreach 不支持用"@"来抑制错误信息的能力. ...

  7. Java头文件找出循环依赖_Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?...

    本文重点是讲解如何解决循环依赖这个问题.关心这个问题是如何产生的,可以自行谷歌. 如何重现这个问题 // a.js const {sayB} = require('./b.js') sayB() fu ...

  8. Linux按列合并两文件,列的拼合

    Linux按列合并两文件,列的拼合 Linux按列合并两文件,列的拼合_苏冉旭的博客_百度空间 Linux按列合并两文件,列的拼合 awk 和 cut 都能把一个多列文件差分成单列文件,那么反过来也可 ...

  9. java中出现循环问题如何解决_java如何解决循环引用

    Excel 循环引用产生的原因及解决方法 来源:excel 格子社区 我们打开 ... (Garbage Collection Thread) , 来跟踪每一块分配出去的内存空间, Java 虚拟机 ...

最新文章

  1. 去一家小公司从0到1搭建后端架构,做个总结!
  2. Jenkins + sonarqube集成实现发布代码审计
  3. 20181023 上课截图
  4. selenium之如何等待页面元素加载完成
  5. DOS命令解决端口冲突问题
  6. DNN:LSTM的前向计算和参数训练
  7. 文档过期打不开怎么办_4 个超实用金山文档小技巧,很强大也很简单,赶紧收藏!...
  8. Python(24)-面向对象3-可迭代类对象Pokemon
  9. ASN.1编解码:asn1c的基本使用
  10. django 外键_Django 文档解读 - 模型层(1)
  11. JavaScript编辑器推荐
  12. 迅雷beat下载为php,迅雷beta版本下载
  13. Spyder单步调试
  14. Unlocking Information in the Microsoft Office System Using XML
  15. 用友U8案例实验应收管理后台配置
  16. Windows+Anaconda+tensorflow+keras深度学习框架搭建--reproduced
  17. ChatGPT横空出世,让人们看到了AI的更大创造力,聚光灯再度打到了OpenAI的身上
  18. MAC visio的替代品Omnigraffle+激活许可证
  19. 教你如何实现一个完美的移动端瀑布流组件(附源码)
  20. mac上的ssh连接工具

热门文章

  1. Mac下载配置aria2和baidudl
  2. Android内核开发:在源码树中添加新的app应用
  3. Android5.1/7.1 Selinux JNI访问新增/dev/xxx设备节点
  4. tensorflow之add_n
  5. 扑克牌图片一张一张_扑克牌玩法 | 简单易上手的扑克游戏,重点是你没玩过!...
  6. ios 怎么判断字符串的字节数_如何用IOS判断字符串是不是纯数字
  7. python k线顶分型_顶分型底分型代码
  8. 服务器硬件 做raid操作 ubuntu linux做raid
  9. spring学习--bean--普通bean与工厂bean(FactoryBean)区别
  10. 数据结构by王卓老师