PHP foreach 引用 &
以前用foreach,总喜欢在第二次遍历时改变value的拼写,比如
$x = array("a", "b", "c");
foreach ($x as &$value)
{
echo $value." ";
}
echo "<br/>";
foreach ($x as $value2)
{
echo $value2." ";
}
得到结果
a b c
a b c
并没有什么不妥.
今天写的时候没有留神,发现出错了,示例如下
$x = array("a", "b", "c");
foreach ($x as &$value)
{
echo $value." ";
}
echo "<br/>";
foreach ($x as $value)
{
echo $value." ";
}
得到结果
a b c
a b b
发现问题了吧?
这是因为在第一次的foreach中使用了引用,使得$value变成了引用变量,并且$value与 $x[ 2 ]共享变量值,在第二个foreach中,不断的将$x中的值赋给$value,进而$x[2]的值也会跟随者$value的变化而变化.
过程如下:
第一个foreach,第一次$value = $x[0]=a,第二次$value = $x[1]=b,第三次$value = $x[2]=c.此时,$value与 $x[ 2 ]共享变量值
第二个foreach,第一次$value = $x[0]=a(此时$x[x]也就=a),第二次$value = $x[1]=b(此时$x[x]也就=b),第三次$value = $x[2]=b(因为上一步已经将$x[2]改变成了b)
以后为了避免类似情况发生可使用以下方法:
①第一次foreach使用引用后,unset($value); 来取消$value对地址的共享
②在第二次或更多遍历时改变value的拼写
PHP foreach 引用 &的更多相关文章
- php foreach引用赋值
在写代码时发现php foreach引用赋值会导致意外的行为. 代码示例: <?php $arr = array('a','b','c'); foreach($arr as $k=>&am ...
- foreach 引用传值&
foreach 引用传值& php 怎么在foreach中循环数组 ,的时候添加元素跟值 foreach($arr as $key => &$vo){ //注意,由于上面遍 ...
- 说说PHP中foreach引用的一个坑
From: http://blog.csdn.net/yipiankongbai/article/details/45307767 先来看看下面这段代码: <?php $arr = array( ...
- PHP 数组 foreach引用导致的bug
<?php $arr = array('a', 'b', 'c'); foreach($arr as &$v) {} foreach($arr as $v) {} var_dump($a ...
- PHP foreach引用&
将以下代码打印 $variable = ['a', 'b', 'c']; foreach ($variable as $key => &$value) { } foreach ($var ...
- foreach引用坑
先看下面代码 $arr1 = [1, 2]; foreach($arr1 as $key => $value) { $value = $value + 1; } var_dump($key, $ ...
- foreach中引用 的问题
在工作中遇到 关于 php foreach 引用的一个问题 简单来说,如下代码 $arr=array('a','b','c' ,'d'); foreach($arr as $k=>&$v ...
- foreach绑定
目的 foreach可以将一个数组中的实体循环的进行绑定.这在将一个list显示成table时非常有用. 假设数组是observable的,当在绑定后做了add, remove,或者重新排序后,绑定会 ...
- PHP 易出问题记录
PHP foreach引用缺陷 <?php $array = array(1, 2, 3); foreach ($array as &$v) {} foreach ($array as ...
随机推荐
- 分布式-网络通信-IO-基础(2)
IS 与 OS1. 基本 IO 操作1.1. InputStream 与 OutputStream1.1.1. 输入与输出我们编写的程序除了自身会定义一些数据信息外,经常还会引用外界的数据,或是将自身 ...
- 剑指offer:关于复制构造函数
1:首先参看代码: #include "stdafx.h" #include "iostream" using namespace std; class A { ...
- vuex 的介绍
vue-cli 中 css 的作用域 scoped vue 数据的为响应数据,一改全改,一变全变的特性,我们的很多处理也会围绕着他 vuex 是处理数据的,是 vue 的数据仓库 vuex 的作用:采 ...
- nginx-location正则表达式匹配规则及动静分离
nginx-location正则表达式匹配规则及动静分离 发表于 2018年03月5日 | 分类于 nginx| 0 nginx,location常用正则表达式,及nginx动静分离 nginx ...
- 问题:解决上传文件IE浏览器弹出下载框bug?
控制器方法的返回值必须以String返回,再由js处理转换成json对象 $.ajaxFileUpload({ url: "/project/proj_conver_upload&quo ...
- Dubbo HA 高可用
一.zookeeper 宕机 现象:zookeeper 注册中心宕机,还可以消费 dubbo 暴露的服务 健壮性 监控中心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册中心仍能通过缓 ...
- python源码
初学者 GitHub - kennethreitz/pip-pop: Tools for managing requirements files. GitHub - kennethreitz/envo ...
- [Flask]jinja2模板-宏的使用
定义宏: macros.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- nodejs之express中间件body-parser使用
1.安装express和body-parser npm install express npm install body-parser 2‘.案例如下 var express = require('e ...
- python生成密码字典
import itertools as its words = 'abcdefghijklmnopqrstuvwxyz1234567890' r = its.product(words, repeat ...