位置: 编程技术 - 正文

浅谈PHP中关于foreach使用引用变量的坑(php的foreach)

编辑:rootadmin

推荐整理分享浅谈PHP中关于foreach使用引用变量的坑(php的foreach),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php中的for循环,php中的foreach,php fork,php中for语句,php中foreach用法及参数,php中for语句,php中的foreach,php中的foreach,内容如对您有帮助,希望把文章链接给更多的朋友!

写PHP好多年,但仍然会犯低级错误,今天遇到个 foreach中引用变量时的坑,PHP版本为 5.6. 代码如下:

输出结果

一开始看到第二个 foreach 输出的结果感觉很是莫名其妙,怎么会输出两个 d_d 呢?

仔细想了想,原来因为PHP foreach 中的 $a 的作用域是整个函数的局部变量,在循环外部仍然有效,而不是被封闭在循环内的,

所以当执行第二个foreach 时的 $a 并不是新的变量,而是仍然指向 $arr 数组第5个元素的地址引用,

当第二个 foreach 在循环时实际上是在不停的给 $arr 数组的第5个元素赋值,

具体赋值情况,

浅谈PHP中关于foreach使用引用变量的坑(php的foreach)

第一次:a_a 赋值给第5个元素, 结果为: [a_a, b_b, c_c, d_d,a_a]

第二次:b_b 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,b_b]

第三次:c_c 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,c_c]

第四次:d_d 赋值给第5个元素,结果为: [a_a, b_b, c_c, d_d,d_d]

第五次:此时因为第五个元素已经变成 d_d 又重新把 d_d 赋值给第5个元素,结果还是为: [a_a, b_b, c_c, d_d,d_d]

解决办法:

1.尽量不使用相同的循环变量名;

2.每次使用完或再次使用前进行 unset($a); 处理,解除地址应用

还是用上面代码示例:

输出结果:

现在就正常了,这些小细节一定要注意了

标签: php的foreach

本文链接地址:https://www.jiuchutong.com/biancheng/301336.html 转载请保留说明!

上一篇:利用switch语句进行多选一判断的实例代码(怎么用switch语句)

下一篇:PHP多维数组元素操作类的方法(phpwhile循环多维数组)

  • 附加税申报表怎么做
  • 关联交易纳税调整期限
  • 什么经营范围可以开电费发票
  • 个税申报导入上月数据
  • 委托加工物资需要计提存货跌价准备吗
  • 企业分立特殊性税务处理涉税
  • 3%减按2%征收是哪个税目
  • 不能抵扣的普通发票
  • 保险摊销什么 时候开始
  • 销售收入分成率计算公式
  • 开票软件服务费不交会怎么样
  • 季节性停工损失属于期间费用吗
  • 外地预缴税费怎么做账
  • 营改增后房地产开发税费一览表
  • 10万元以下免征教育费附加
  • 什么称为非正数
  • 个体户在银行开户
  • 记账凭证按照填列方式的分类包括
  • 纳税额和纳税总额
  • 国债逆回购会跌吗
  • 发生坏账损失账务处理
  • mac上如何切换apple id
  • 怎么用u盘启动dos
  • win10通知栏怎么设置
  • 浅谈12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践
  • 一年内的待摊费用可以一次性进入成本吗
  • windows没有搜索
  • 专项用途财政性资金纳税调整表
  • win11专业版和家庭版哪个更流畅
  • 长期借款和短期借款会计分录的区别
  • 发票抵扣条件
  • 新会计准则5步法
  • 没有资质证书的公司可靠吗?
  • 酒店原材料内部分析
  • springboot aop切面
  • 软件折旧费
  • 命名空间 php
  • 逐帧flash动画
  • 中国烟草资产负债表
  • 租入固定资产改良
  • 预收账款是否需入账
  • 开票软件怎么增加开票员
  • 桥接模式例题
  • 事务所的账务处理
  • MySQL的主从复制基于什么实现的?
  • 短期借款的其它账户
  • 商品削价的核算
  • 建筑劳务公司一年赚多少钱
  • 金融放贷工作具体做什么
  • 注册公司时的注册资金认缴是什么意思
  • 计提的工会经费年底有余额咋处理
  • 房地产开发企业会计制度
  • 作业成本多用于直接成本的核算
  • 差旅费住宿专票可以抵扣增值税吗
  • 债券票面利率与期限成正比
  • 融资租赁的计算方法有哪些
  • 销售出库单需要盖章吗
  • 购车预付款交了可以退吗
  • 农行网银只有一张卡吗
  • linux下mysql开启远程访问权限 防火墙开放3306端口
  • win8.1 0x80072efe
  • VMware虚拟机中卸载java命令
  • freebsd查看路由
  • SUSE Linux Enterprise Server 11 SP1 安装教程图文详解
  • PHP 7.0.0 Alpha 2 发布
  • windows8.1使用指南
  • ubuntu系统启动流程
  • WIN10系统优化精简工具
  • 麒麟系统怎么执行命令
  • linux命令find用法
  • 编写一个简单的shell
  • html、css和jquery相结合实现简单的进度条效果实例代码
  • socket怎么用
  • js定义json对象
  • unity3d all compiler errors
  • javascript中var的作用
  • js对象用法
  • 企业购置房屋需要交哪些税费
  • 电子税务局做什么的
  • 纳税人的种类包括
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设