php:foreach同时使用$value和&$value时的一个坑
来源:互联网 发布:淘宝助理连打设置 编辑:程序博客网 时间:2024/06/03 12:27
前言
今天吃饭的时候同事发了一个很有意思的一段代码
<?php$array = array(1, 2, 3);foreach($array as &$value){}print_r($array); //输出 1,2,3foreach($array as $value){}print_r($array); //输出1, 2, 2
很有意思,经过两个foreach后数组变了
原因
回来后查了下官方文档对foreach的解释,关键点如下
1.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)2.可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值3.数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁ps: 对$key同样适用 本文就只分析$value了
前两点是基础知识了,关键是第三点,很容易分析得到:
1.foreach之后如果$value应该指向的是数组最后一个元素,如果$value是引用的话循环后仍然保留,即$value将一直是指向最后一个元素的引用
2.而本文例子第二次使用foreach时不是使用&$value 而是 $value,所以$value在这次循环中还是一直指向最后一个元素(也就是说如果第二次使用&$value的话就没问题),于是最后一个元素的将一直随着循环到值一直改变,最后和倒数第二个元素的值一样
总结
只要使用foreach($array as &$value)这种传引用的格式时,在foreach之后记得加上unset($value),即使是该代码段中当下只存在一个foreach,以防以后修改代码的时候自己遗忘或者给后来者挖坑
1 0
- php:foreach同时使用$value和&$value时的一个坑
- 用python遍历列表,同时输出索引号和值,类似php的foreach(array_expression as $key => $value)
- php foreach循环语句的&$value与$value辨析;
- 对php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
- PHP foreach的两种用法 as $key => $value
- PHP foreach的两种用法 as $key => $value
- PHP foreach的两种用法 as $key => $value
- PHP在foreach中对$value赋值无效的问题
- PHP foreach的两种用法 as $key => $value
- PHP获取表单值--同时获取下拉框的Value和Text值
- PHP获取表单值--同时获取下拉框的Value和Text值
- Mybatis foreach嵌套遍历Map的key和value
- winform中的ComboBox同时设置text和value的方法
- 做个同时带Text和Value的ComboBox
- 做个同时带Text和Value的ComboBox
- Java同时输出Map的Key和Value处理方法
- php 使用数组key value 去重一个二维数组
- Map的key和value的使用
- Spring3事务管理——使用原始的TransactionProxyFactoryBean
- ByteBuffer Converting CharBuffer
- C语言一维数组的定义和引用
- 杨辉三角最优解法
- ubuntu16添加引导win10的启动项
- php:foreach同时使用$value和&$value时的一个坑
- 三、solr集群搭建
- 微信小程序 表单验证
- SpringMVC 前后台传参(对象集合,Map参数)
- 【redis】redis使用前后性能对比
- 1027: 求具有abcd=(ab+cd)2性质的四位数
- TCP协议的11种状态变迁
- hdoj 1213 How Many Tables
- 剑指offer(java代码)——二维数组中的查找