使用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. 《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐
  2. char值序列是什么Java_CharSequence和java之间的确切区别
  3. python turtle库画图案-Python如何使用turtle库绘制图形
  4. qt 中的 quit() close()与 exit()
  5. 只有想不到,「99」种扩展Jupyter功能的好方法
  6. channelinactive触发后不关闭channel_go那些事儿|channel使用及其实现原理
  7. html静态页面引用其他页面,Shtml完美解决静态页面内部调用其他页面(非Iframe、Object、Js方法)...
  8. tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
  9. 【JVM】强引用、软引用、弱引用、虚引用分别是什么
  10. 汇编学习--7.16--直接定址表
  11. Spring Annotation是怎么工作的?
  12. child-selector解释
  13. ISBN书号怎么查询
  14. Windows 优质软件
  15. 动态规划题目——背包
  16. GitHub 标星 1000+ 的开源电子书
  17. Siri创始人正式展示Viv助手 比想象中要强大
  18. 数据结构课程设计之员工通讯录
  19. MicrosoftWPS
  20. python 两个冒号是什么成语_python查询双押词

热门文章

  1. 【译】Introduction to Smart Contract and DApp Security
  2. Android免Root环境下Hook框架Legend原理分析
  3. Building a Simple, Local, Python Blockchain – Part 1
  4. redhat6搭建ftp
  5. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
  6. linux dns语法检测工具,DNS解析检查工具之nslookup
  7. c++ 定时器_【话说定时器系列】之十:PWM输入模式测量脉宽及占空比实验
  8. md5后得到的32位字符串存储到mysql中太占空间了_好看!快收藏:非常完整的 MySQL 规范...
  9. Tex2Word vs Word2Tex
  10. 数据挖掘讲座:我所知道的一点Data Mining