PHP:深入理解PHP里Foreach改变原始数组值的两种方法

PHP foreach循环的用法详解 通过上述示例,你应该对PHP foreach循环的用法有了更好的理解。它是一种强大的循环结构,可以用于遍历数组和关联数组,并且可以在循环体中执行各种操作。在本文中,我们将详细介绍foreach循环的用法,并提供一些示例代码来帮助你更好地理解。在这个示例中,我们定义了一个关联数组,表示一个学生的信息。通过foreach循环,我们遍历数组中的每个键值对,并将键和对应的值打印出来。通过foreach循环,我们遍历数组中的每个元素并将其打印出来。则是在每次循环中当前元素的值。,我们可以在循环体中修改数组元素的值。 阅读详情

问题起源于一段代码:

teamUnit 是所有的团队项目
infoList 是已经报名了的团队项目
方法目的是取所有的团队项目和已经报名信息的进行比对,通过一个双重的foreach,赋予teamUnit的报名状态(更改原始的数组值)。

            foreach ($teamUnit as $item) {
                $item['STATE'] = 0;//标识该项目的报名状态 0 未报名/ 1 已报名
                foreach ($infoList as $info) {
                    if ($item['id'] == $info['UNIT_ID']) $item['STATE'] = 1;
                }

但这个方法被老师和学长指出存在问题因为:$item为作用域为foreach的方法体内部的局部变量,但我想通过它去改变teamUnit,虽然存在质疑但是却是能够成功改变。


为什么?
经过查找找到了部分答案:
stackoverflow上的解答
php的foreach官方文档

1  foreach (array_expression as $value)
2  foreach (array_expression as $key => $value)

在官方文档中foreach有上面两种方式:
第一种:文档中写道:

The first form loops over the array given by array_expression. On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next iteration, you’ll be looking at the next element);

每一次迭代将内部数组的指针赋值给$value,所以我之前可以通过这种方法机缘巧合的修改成功原始数组的值。
第二种:

The second form will additionally assign the current element’s key to the $key variable on each iteration.

第二种方法是每一次将当前元素的键赋给key,在多维数组中key表现为索引,然后通过索引直接改变原数组值。


为什么不推荐使用?

在stackoverflow上和官方文档上都描述到第一种是不太推荐使用的方法:

1.stackoverflow中说到:第一种本质为引用传递,并且在PHP中引用传递的使用是有争议的不建议使用;
2.官方文档中说到:第一种方式在php5中支持但容易出现错误,php7中已经将这种调用内部数组指针方法抛弃(不是第一种方法不能用了,而是其引用传递的本质发生更改):

In PHP 5, when foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.
As foreach relies on the internal array pointer in PHP 5, changing it within the loop may lead to unexpected behavior.
In PHP 7, foreach does not use the internal array pointer.

总结
所以foreach更改数组值建议使用第二种方法,好了不说了,改代码去了。

网格聚类 Grid Clustering/Grid-based Clustering 本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。 阅读详情

相关推荐

读书笔记|智能运维系统落地方案

对于互联网公司来说,系统复杂化导致的人工运维成本激增已经是普遍现象,采用智能运维是行之有效的应对策略。智能运维的核心思想是利用算法来处理海量运维数据,积累运维经验,从而代替人工思考判断,以自动化的过程实现风险的预防、发现、定位和处理。而智能运维系统是其中的重中之重,但建设企业应用智能运维系统,不是应用运维部独立规划设计就可以完成的,它需要业务、产品、开发、基础设施运维多部门协同才能顺利实施。 那么,作为运维人员,您是否了解智能运维系统的架构?如果参与规划建设智能运维系统,该怎么着手呢?下面我们立足实际需求

xiaoshuaca的博客 681

PHP foreach 加&遍历的同时改变原数组即修改数据或者增加数据

注意:如果我要改变数组某一个值 直接遍历的话原数组是不会变的 $data=array(1,2,3,4); foreach($data as $k=>$v){        if($v==2)  $v=666;//我们想把值等于2的改为666 这样的话在内部改变了$v但是$data还是没改变 } 下面提供两种方法 1.使用键名的方式 foreach($data as $k => ...

hrbsfdxzhq01的博客 2040

数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现

前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;

‘’ 2万+

php foreach修改每个值,PHP foreach更改原始数组值

我在多维数组中非常新,这是给我大的时间。我的数组如下:$fields = array("names" => array("type" => "text","class" => "name","name" => "name","text_before" => "name","value" => "","...

weixin_35327824的博客 260

别再问ARM麒麟怎么装微信了!手把手教你用铠大师搞定Windows软件(飞腾/海思芯片实测)

本文详细介绍了如何在ARM架构的信创电脑(如飞腾/海思芯片)上使用铠大师安装和运行Windows软件,解决微信、Office等常用软件的兼容性问题。通过实测数据对比,铠大师在性能和易用性上显著优于传统方案,为麒麟系统用户提供了一套完整的解决方案。

weixin_28736355的博客 892

IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略

本文深入解析IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略,涵盖其核心特性、硬件电阻调节技巧、I2C动态控制方案、散热设计优化及典型问题排查。IP2315支持多种快充协议,如Type-C PD、华为FCP等,适用于便携设备快速充电需求,并通过I2C实现灵活的充电参数设置,提升充电效率与安全性。

weixin_29248313的博客 538

php 同一个数组两个foreach 得到莫名奇怪的结果

今天要实现的功能:取出菜单并判断用户是否已经选中这个菜单,同时还要给菜单归类。 这样的代码看起来没什么问题。当然是我修正后的。 修正前,第二次foreach的变理,也是$m,结果得出来的数组,最后一个元素,总是与倒数第二个相同。 后面打印数组,慢慢排查,才发现第二次foreach用的$m,与第一次的foreach相同了,数据被污染了。 ...

10年老码农 446

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 472

php在foreach中如何修改数据的值,php中用foreach改变数组的值的问题

“foreach语法结构提供了遍历数组的简单方式。foreach仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:foreach (array_expression as $value)statementforeach (array_expression as $key => $value)statement第一种格式遍历给定的ar...

weixin_29039773的博客 1047

稳定性性能系列之五——Native Crash深度分析:工具实战

深入理解Native Crash的机制与分析方法,掌握addr2line、ndk-stack、gdb等核心工具的实战使用,学会从Tombstone文件中快速定位问题根因

Cheson的专栏 1542

基于Simulink的光储系统黑启动能力仿真

本文基于Simulink平台构建了光储系统黑启动仿真模型,详细阐述了储能VF控制、光伏孤岛MPPT和同步并网等核心控制策略。通过分阶段协调控制(储能启动→关键负载→光伏接入→非关键负载→同步并网),实现了60秒内恢复供电、母线电压波动<5%的性能指标。仿真结果表明,协调控制策略相比无序启动可显著提升系统稳定性,避免电压崩溃和负载跳闸。文章还提供了完整的建模步骤、核心代码及进阶优化方向,为微电网应急供电设计提供了实用参考。该模型适用于光伏储能系统的黑启动能力验证和优化研究。

amy_mhd的博客 106

php数组foreach赋值,php foreach循环是什么

在循环语句的使用中,我们知道for循环是使用最多的语句。不过有一种语句跟for循环比较相似,在处理数组上有部分功能效率稍微快一些,相信大家已经猜到了说的是foreach循环。下面我们就其的概念、语法、两种使用方式分别进行讲解,最后带来foreach循环的代码实例。1.概念Foreach 循环用于遍历数组,它根据数组中每个元素来循环代码块。2.语法foreach ($array as $key=&g...

weixin_36185435的博客 663

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1448

PHP:三种数组数值数组,关联数组,多维数组,foreach改变数组原始值,添加数组元素

三种数组: 数值数组: 自动分配 ID 键(ID 键总是从 0 开始): $cars=array(&quot;Volvo&quot;,&quot;BMW&quot;,&quot;Toyota&quot;); 人工分配 ID 键: $cars[0]=&quot;Volvo&quot;; $cars[1]=&quot;BMW&quot;; $cars[2]=&quot;Toyota&quot;; 关联

define_LIN的博客 1540

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入理解PHP原理之foreach

·        作者: Laruence(   ) ·        本文地址: http://www.laruence.com/2008/11/20/630.html ·        转载请注明出处 foreach是PHP中很常用的一个用作数组循环的控制语句。 因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式(对用户透明) 今天,我们就来一起分析分析,foreach是如

walxiaosage的博客 1984

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

foreach php,深入理解PHP原理之foreach

foreach是PHP中很常用的一个用作数组循环的控制语句。因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式(对用户透明)今天,我们就来一起分析分析,foreach是如何实现数组(对象)的遍历的。本节内容涉及到较多编译原理(lex and yacc)的知识,所以如果您觉得看不太懂,可以先找相关的资料看看。我们知道PHP是一个脚本语言,也就是说,用户编写的PHP代码最终都是会被PHP解释...

weixin_39719078的博客 349

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

php foreach 源代码,php中用foreach来操作数组的代码

foreach()有两种用法:foreach(array_name as $value){statement;}这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一 步,也就是下次循环回得到下一个元素。foreach(array_name as $key => $value){statement;}这里...

weixin_26642481的博客 215

php 复制一个数组中,php foreach为什么要复制一个数组出来操作

目的是什么 求过程回复内容:目的是什么 求过程啥意思啊!恕我愚钝,你要表达什么意思啊?PHP foreach 不需要复制一个数组出来操作,你从哪里看到的需要复制一个数组?PHP foreach遍历的是数组的副本,我想大概是为了避免你一边遍历一边修改(添加项)导致死循环?随便猜测的。。。题主是想知道foreach的内部实现时, 是复制了一个临时变量来操作, 而不是操作实际的数组吧我对这个问题一直...

weixin_32659481的博客 302

PHP中foreach的key与value

1.foreach函数的语法格式 foreach ($variable as $key =&gt; $value) { # code... } 其中$variable指的是实际存在的要循环的数组名 $key是键值对数组的键 $value是键值对数组的值 2.key与value的名字可换(自定义) 3.key=&gt;value可以写成单独的...

TLROJE787的博客 6361

php的foreach循环执行过程分析以及循环中执行unset()的一些问题

文章目录一、前言二、foreach的执行过程1、关于版本不同的foreach变化2、关于引用计数3、探寻foreach的运行过程三、foreach中执行unset()的问题1、当我们是为了筛选数组的时候2、当我们unset()之后还要执行一些操作的时候3、总结 一、前言       博主在最近操作数组的时候,在foreach循环中执行了u...

铁柱的博客 4813

【PHP高级编程实战】:深入理解foreach嵌套多维数组的底层机制与避坑策略

掌握PHP多维数组的foreach嵌套技巧,高效遍历复杂数据结构。详解嵌套循环执行流程、引用陷阱与性能优化策略,适用于配置处理、树形菜单等场景。深入底层机制,避开常见错误,提升代码健壮性,值得收藏。

Instrulink的博客 1039

揭秘PHP多维数组遍历难题:5种foreach优化方案让你少走3年弯路

掌握PHP多维数组遍历难题的终极方案,通过5种高效foreach优化技巧提升性能。适用于复杂数据处理场景,详解递归遍历、引用传值与扁平化策略,显著减少执行时间,代码更简洁易维护,值得收藏。

ProceShoal的博客 943

掌握这3种技巧,轻松搞定PHP多维数组foreach嵌套(资深架构师亲授)

掌握PHP多维数组的foreach嵌套技巧,轻松遍历复杂数据结构。适用于处理表单、JSON解析等场景,详解递归遍历、引用传值与扁平化处理三种核心方法,提升代码效率与可读性,值得收藏。

IterStream的博客 668

PHP删除数组中空值的方法介绍

这篇文章主要介绍了PHP删除数组中空值的方法介绍,需要的朋友可以参考下 说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下:   &lt;?php    foreach( $arr as $k=&gt;$v){        if( !$v )            unset( $arr[$k] );    }  ...

丿灬安之若死 2019

php数组的循环 foreach list

//// $device = new Device(); //// $result = $device-&gt;curlOpenDoor(1,'2131',1); //// pr($result); // /** // * 要求: // * 1.数组必须是索引数组 // * 2.必须是连续的索引...

请叫我法斗先生 1645
上一篇: Session和Cookie的区别
下一篇: PHP:三种数组数值数组,关联数组,多维数组,foreach改变数组原始值,添加数组元素
define_YIDA
博客等级 码龄9年 323粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值