首页 > 编程语言 >PHP代码运行时两个foreach迭代变量一样导致错误

PHP代码运行时两个foreach迭代变量一样导致错误

时间:2024-05-10 10:56:36浏览次数:11  
标签:迭代 list value list2 代码运行 foreach key PHP

请看如下代码:

$list = [1,2,4,5];
$list2 = [5,6,7,9];
foreach ($list as $key => &$value) {
  $value = strval($value);
}

foreach ($list2 as $key => $value) {
  $value = 11;
}
pre($list); //定义打印函数

预期结果是 :

array{"1", "2", "4", "5"}

但实际结果却是:

array{"1", "2", "4", 11}

为什么???

原因:因为两次foreach迭代变量名称一致,而且第一次迭代$value使用&取地址;导致第一次foreach结束时$value时会随着第二次foreach的$value值变化。

解决:每次foreach迭代结束后都使用unset销毁迭代中间变量

就像这样:

$list = [1,2,4,5];
$list2 = [5,6,7,9];
foreach ($list as $key => &$value) {
  $value = strval($value);
}
unset($value);

 

标签:迭代,list,value,list2,代码运行,foreach,key,PHP
From: https://www.cnblogs.com/cnxzb/p/18183818

相关文章

  • [ISITDTU 2019]EasyPHP RCE异或限制
    解决一个一直以来的问题,RCE的异或绕过问题。先了解下奇技淫巧吧-->https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html接下来说说今天的问题,在做异或问题是发现许多payload都是(xxxxx)^(%ff....),这都是怎么来的呢。现在说说吧,就比如拿'_'号来说,实质上异......
  • thinkphp模型hasOne、hasMany、belongsTo详解
    在ThinkPHP框架中,hasOne、hasMany和belongsTo是用于定义模型间一对多(1:n)、一对一(1:1)和多对一(n:1)关联关系的方法。以下是一些简单的示例来解释这些关系:1.hasOne(一对一关系)假设我们有Author和Profile两个模型,一个作者(Author)有一个个人资料(Profile)://Author模型namespacea......
  • 用PHP连接postgreSQL时遇到的问题
    先说说我的环境的版本,apache是2.4的,postgreSQL为目前最新的16版本,php刚开始为7版本。第一个问题是PDO连接PostgreSQL报错,SCRAMauthenticationrequireslibpqversion10orabovein这个问题是libpq的版本过低,要版本10以上,(至于libpq是什么,我目前也不懂)后来我检查了php版本发......
  • [BJDCTF2020]EzPHP 审计绕过
    今天来个难点的题。点击查看代码<?phphighlight_file(__FILE__);error_reporting(0);$file="1nD3x.php";$shana=$_GET['shana'];$passwd=$_GET['passwd'];$arg='';$code='';echo"<br/><font......
  • phpcms发送邮件
     pc_base::load_sys_func('mail');sendmail($email,'您好,点击链接注册账号','注册账号请点击链接:'."<ahref=".$addr.">".$addr."</a>");会得到一个授权码(很重要)  下面代码,就是一个普通的类/***发送邮件*@p......
  • php---递归获取最上级和所有子级
    在做PHP开发的过程中,经常会需要获取最上级或所有子级的应用场景:一、获取最顶级$list=[['id'=>1,'pid'=>0,'name'=>'张飞'],['id'=>2,'pid'=>1,'name'=>'张苞'],['id'=>3,......
  • php-strpos 判断一个字符串是否存在于另一个字符串中
    在PHP中,你可以使用strpos()函数来判断一个字符串(例如"play")是否存在于另一个字符串中。strpos()函数会返回子字符串在原始字符串中首次出现的位置(索引从0开始),如果子字符串不存在,则返回false。以下是一个简单的示例:$string="Iliketoplaybasketball";$substring......
  • 查看PHP-FPM的内存占用、进程个数等信息
    查看每个PHP-FPM进程的内存占用(并排序):1ps-ylCphp-fpm--sort:rss这个命令会显示所有php-fpm进程的内存占用情况,并按内存占用大小进行排序。查看当前php-fpm总进程数:1ps-ylCphp-fpm--sort:rss|wc-l这个命令会列出php-fpm的所有进程,然后通过wc-l计算行数,从而得到......
  • 假设每次截图有个命令 shotimg ,每次只能处理最大1w高 1w宽的图,现在有一张4w*4w的图需
    为了让这个函数更加灵活以支持任意大小的图片和不同的分割大小,我们可以将函数的参数稍作调整,使其接受目标分割尺寸(targetSize)作为参数,而不是硬编码为10000。同时,我们可以使用整数除法(//)来确保分割的尺寸是整数,并且使用模数运算符(%)来检查是否需要进行最后一次不完全的分割。以下是......
  • 对于耗时比较长的程序,比如请求外部链接,为什么swoole比php-fpm并发好
    Swoole相比PHP-FPM在处理耗时较长的程序,如请求外部链接时表现出更高的并发能力,原因主要包括以下几点:1.**常驻内存**:Swoole是一个高性能的异步并发框架,它以扩展的形式运行在PHP中,能够将PHP程序常驻在内存中。这意味着Swoole的服务一旦启动,就会持续运行,不需要为每个请求创建和销毁......