foreach中引用 的问题

在工作中遇到 关于 php foreach 引用的一个问题

简单来说,如下代码

$arr=array(‘a‘,‘b‘,‘c‘ ,‘d‘);

foreach($arr as $k=>&$v)

{

  ........

}

foreach($arr as $k=>$v)

{

........

}

print_r($arr);

结果是

a

b

c

c

参考了 这篇文章,以及 这篇文章

在第一次foreach 遍历结束后,$v的值为‘d‘,对应的key为3,注意这里$v使用的是引用

在第二次foreach 遍历第一个元素时,$v=‘a‘ ,那么根据引用 ,$arr[3]=‘a‘

此时,$arr的值为

0 a

1 b

2 c

3 a

遍历第二个元素时,$v=‘b‘ , 那么根据引用 ,$arr[3]=‘b‘

此时,$arr的值为

0 a

1 b

2 c

3 b

遍历第三个元素时,$v=‘c‘ , 那么根据引用 ,$arr[3]=‘c‘

此时,$arr的值为

0 a

1 b

2 c

3 c

遍历第三个元素时,$v=‘c‘ , 那么根据引用 ,$arr[3]=‘c‘

此时,$arr的值为 ,跟上面的没有变化

0 a

1 b

2 c

3 c

解决方法:

在第一个foreach之后,加上unset($v);

foreach中引用 的问题,布布扣,bubuko.com

时间: 2024-08-25 14:43:34

foreach中引用 的问题的相关文章

xsl:for-each中引用循环外全局变量

<xsl:variable name="temp_driving_type" select="WebPage/Data/OptReturnData[@OptRetName='GetEmpCarById']/OptRetData/NewDataSet/Table/driving_type"/> <select class="Input" name="driving_type" id="driving_

php foreach使用引用的陷阱

最近工作中在foreach中使用引用的时候出现一个怪现象,使用2次foreach的时候数组值发生了改变,代码示例如下 1 <?php 2 $arr = array('1','2','3'); 3 foreach($arr as &$row){ 4 } 5 foreach($arr as $row){ 6 } 我的预期结果是1,2,3 但是实际结果输出1,2,2奇怪了,遍历数组难道还会改变数组的值么,猜测原因肯定出现在&row这个引用上.在第2个循环里打印$arrArray( [0]

php中引用&amp;的一个小实例

在百度知道上碰到一段关于php的引用符&的代码,对于初学都来说还是很考验理解分析能力的,把代码和自己的分析贴上来作一个备份,也与大家共勉. 代码片段: 1 $arr =array(1,2,3,4); 2 foreach ($arr as $k =>&$v) {} 3 foreach ($arr as $k=>$v) {} 4 print_r($arr); 输出结果: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 3

PHP 关于foreach 中修改array中元素的值

PHP中支持使用引用'&',用法与C基本一样,个人理解就是函数中引用的变量指针直接指向了传入参数的源地址,所以使用引用还是存在一定的危险性.所以对于一重循环,建议不使用引用,直接修改原array即可 $table_exchange=array(); array_push($table_exchange, array( "cnid" => '123', "status" => 0, "checked" => false,

ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我的项目结构如下: 可以看到解决方案中就两个项目,AspNetCoreWebApp就是一个ASP.NET CORE MVC 2.0的项目,而MyNetCoreLib是一个.Net Core 2.0的类库项目,为了体现AspNetCoreWebApp是通过程序集来引用MyNetCoreLib的,我还在解

.net 工程中引用出现感叹号

在工程中引用出现感叹号,有两个原因 原因1:  这是由于之前引用的Dll文件不见了. 右键有感叹号的项,然后选择 "属性" 里边有一个路径属性 这个路径就是之前这个Dll文件的路径,现在这个文件不在了,你需要找到现在这个文件的路径 右键有感叹号的项,然后选择"移除" 右键"引用",选择添加引用,然后选择那个不在的dll的真实路径 其他的项用相同的方式处理 原因2:可能是引用的.Net版本高于了当前工程的.Net版本 更改所引用的工程文件的.Net

C++中引用的底层实现

为了研究一下C++中引用的底层实现,写了一个小代码验证其中的基本原理. 引用是一个变量的别名,到底会不会为引用申请内存空间?如果申请空间,空间存放的是什么,下面的代码就主要解决这个疑问. 代码如下,详细见代码注释 1 #include <iostream> 2 #include<string> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 7 class Test 8

php 中引用的应用

<?php // http://blog.csdn.net/samxx8/article/details/37564103 /** 在PHP 中引用的意思是:不同的名字访问同一个变量内容. (1) 变量之间的引用: $a = 10 ; $b =$a ; // 此时$b和$a所指向的是同一存储地址 ,如果$a = 11 ; 则zend会开辟一个新的单元从来是的$a = 11 ; $b 还是原来的地址 $a = 10 ; $b =&$a ; // 此时$b 就是$a的别名,比如这个人叫小张,大名

Windows Store App 全球化:在后台代码中引用字符串资源

上文提到了引用字符串资源具有两种方式,分别是在XAML元素中和在后台代码中引用资源文件中的字符串资源.在第一小节已经介绍了如何在XAML元素中引用字符串资源,本小节将讲解在后台代码中引用字符串资源的相关知识点. 下面通过一个示例直接讲述如何在后台代码中引用资源文件中的字符串资源.新建一个Windows应用商店的空白应用程序项目,并命名为StringResourcesInCode.在项目中新建一个名为"Strings"的文件夹,在"Strings"文件夹下新建名为&q