PHP的foreach中使用地址注意
简介对于一个PHPer来说,经常使用foreach,但是一般都循环一次,今天一个同事偏偏使用了两次foreach,第一次里面使用了地址符号,第二次循环又使用了同一个变量,这就造成了最后结果上出现问题。
直接上代码:
<?php
$list = ["a"=>1,"b"=>2,"c"=>3,"d"=>4];
foreach($list as &$item){
$item = $item+1;//为每个值加1
}
foreach($list as $item){
echo $item.PHP_EOL;
}
根据上面这段代码,大家可以先猜想下,这里打印的结果是多少呢?是2,3,4,5吗?这样问肯定不是,那么是多少呢?结果如下
[root@localhost root]# php test.php 2 3 4 4
为什么是这个结果呢?其实这里有一个问题需要注意:第一个循环使用了地址符,第二个循环又使用了第一个循环中的变量,所以造成了这种情况。
出现这样问题的分析:
- 第一个循环中item使用的是地址,第一个循环完后,那么地址刚好指向的是list的d这个下标上;
- 第二个循环又使用了item变量,每次遍历都会将item的值进行修改,这样就造成了$list[“d”]的值一直被修改;
<?php
$list = ["a"=>1,"b"=>2,"c"=>3,"d"=>4];
foreach($list as &$item){
$item = $item+1;
}
foreach($list as $item){
echo $item.'='.$list['d'].PHP_EOL;
}
结果如下:
[root@localhost root]# php test.php 2=2 3=3 4=4 4=4
到这里大家应该明白了吧!那么这种情况如何解决了,就是在第一个循环完成后,unset掉$item。
前一篇博客中已经说过Golang对Gzip的处理,其实这是我的服务器端的处理,那么当我们服务器返回Gzip压缩的字符串后,客户端如何进行解压呢?本文主要记录下JavaScript对Gzip进行压缩和解压处理。
在PHP中,对二维数组排序还是非常简单的,但是在Golang中对二位数据排序显的就稍显麻烦,但是我们还是可以通过结构体来进行排序,本文主要记录Golang如何通过结构体的多个字段来进行排序。
按钮在我们开发过程中是少不了的,本节将介绍Flutter常用的一些按钮组件,例如:TextButton、OutlinedButton、ElevatedButton
通过sudo命令,可以让普通用户在执行指定命令或程序上,拥有超级管理员的权限。并有针对性将不同的命令授予指定的普通用户,同时普通用户不需要知道root的密码就可以得到授权,授权的方式可以通过visudo配置管理。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题