使用foreach的时候出现了一个奇怪的现象,其中一个数组变量的最后一个值莫名其妙被修改了,查看php手册foreach说明发现

Warning

数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

有这样的警告。使用unset 方法或使用其他变量名称。

例如

$a=[1,2];
foreach($a as $key=>$value){$a[$key]=$value+1;
}
echo $value;//输出 2

如果在$a中使用了指针,则会影响后面同名的变量的值,结果如下:

$a=[1,2];
$b=[3,4];
foreach($a as $key=>&$value){$a[$key]=$value+1;
}
print_r($a);
foreach($b as $value){$value++;
}
print_r($a);
print_r($b);输出如下
Array
([0] => 2[1] => 3
)
Array
([0] => 2[1] => 5
)
Array
([0] => 3[1] => 4
)

如果都使用指针或使用unset,则不受影响

$a=[1,2];
$b=[3,4];
foreach($a as $key=>&$value){$a[$key]=$value+1;
}print_r($a);
foreach($b as &$value){$value++;
}
print_r($a);
print_r($b);
输入如下
Array
([0] => 2[1] => 3
)
3Array
([0] => 2[1] => 3
)
Array
([0] => 4[1] => 5
)

使用unset

$a=[1,2];
$b=[3,4];
foreach($a as $key=>&$value){$a[$key]=$value+1;
}print_r($a);
unset($key,$value);
foreach($b as $key=>$value){$b[$key]=$value+1;
}
print_r($a);
print_r($b);
输出如下Array
([0] => 2[1] => 3
)
Array
([0] => 2[1] => 3
)
Array
([0] => 4[1] => 5
)

转载于:https://www.cnblogs.com/joystrong/p/9053900.html

php foreach循环中的变量相关推荐

  1. Python坑:bool是int的子类、列表循环中的变量泄露、lambda在闭包中会保存局部变量、重用全局变量

    bool是int的子类 a = True print isinstance(a, int) print True == 1 print False == 0 运行结果: True True True ...

  2. foreach输出mysql方法_mysql – “foreach”循环:使用R中的所有核心(特别是如果我们在foreach循环中发送sql查询)...

    我打算用"foreach"来uitlize我的CPU中的所有核心.我需要在循环中发送一个sql查询.该脚本在正常的'for'循环中工作正常,但是当我将其更改为'foreach'时它 ...

  3. 在Java中的foreach循环中调用remove

    本文翻译自:Calling remove in foreach loop in Java [duplicate] This question already has an answer here: 这 ...

  4. java for循环 等待_在forEach循环中使用异步/等待

    在forEach循环中使用async / await是否有任何问题? 我正在尝试遍历文件数组并await每个文件的内容. import fs from 'fs-promise' async funct ...

  5. 在循环之前或循环中声明变量之间的区别?

    本文翻译自:Difference between declaring variables before or in loop? I have always wondered if, in genera ...

  6. forEach循环中异步操作的问题

    文章目录 需求: 问题: forEach: 问题代码: 解决方案: 方案一:使用`for...of`循环 方案二:使用`for`循环 方案三:使用`Promise.all()`+`map` 需求: 想 ...

  7. 如何确定foreach循环中的第一次和最后一次迭代?

    问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...

  8. php for循环逗号,关于php:从foreach循环中删除最后一个逗号

    我使用foreach循环从数据库中回显一些值,如果这有意义的话,我需要从最后一个循环中去掉最后一个逗号. 我的循环很简单,如下所示 foreach($results as $result){ echo ...

  9. PHP for循环中的sql语句,php – 在foreach循环中使用SQL结果

    我觉得我错过了一些愚蠢明显的东西,我试图获得SQL查询的结果,然后在循环中使用它们.我觉得我错过了一些愚蠢明显的东西,我已经尝试过,有没有注释掉的线. $sentToID = $_SESSION['u ...

最新文章

  1. jquery 添加 padding_【开发小技巧】11—如何使用JavaScript / jQuery为网站创夜间/高亮模式?...
  2. 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
  3. 精通android布局,Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
  4. 弗吉尼亚理工大学(Virginia Tech)NCR校区招收计算机硕士学位研究生
  5. 为什么我的 Func 如此之慢?
  6. return 、break 和 continue的区别
  7. 行为型模式之 状态模式
  8. 多维数组的本质和指针数组
  9. 云桌面终端_云桌面是否真的有被夸大,看完你就知道了
  10. 修改Opera浏览器默认主页搜索引擎
  11. foremost的下载安装使用说明
  12. 正确的座机号码格式_电话号码格式怎么输入才是正确
  13. VMWare虚拟机开启失败(模块“Disk“启动失败)
  14. 自定义jsx解析工厂函数
  15. python中的arange函数,Python中的arange是什么?和range有什么不同?
  16. 基础2-用卷积神经网络进行颅内和头皮脑电图数据分析的广义癫痫预测
  17. JVM 调优参数总结
  18. 王道计算机考研机试指南刷题笔记-自用
  19. IDEA中类的图标变成J
  20. dhs手术是什么意思_求教DHS的适应症和手术操作规范

热门文章

  1. 编译Android VNC Server
  2. 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
  3. 系统优化方法与智能优化算法
  4. [CODEVS 1087] 麦森数
  5. CVPR 2020 HAN:《Hypergraph Attention Networks for Multimodal Learning》论文笔记
  6. 【学习笔记】多项式相关算法
  7. 显示设备不属于微型计算机的外部设备,微型计算机常用外部设备试题解析
  8. php smart模板,vaphp整合smart模板有关问题
  9. 23 | MySQL是怎么保证数据不丢的?
  10. maven package自己主动部署包