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。
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问题
Flutter开发windows桌面应用处理WebView相关问题
draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标。支持Github,Google Drive, One drive等网盘同步,并且永久免费。如果觉得使用Web版不方便,draw.io 也提供了多平台的离线桌面版可供下载。
chmod命令用于改变文件或目录的权限,但是只有文件或目录的属主和超级用户root才能修改。
Portainer是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的docker环境。Portainer部署和使用都非常的简单,它由一个可以运行在任何docker引擎上的容器组成。Portainer提供管理docker的containers、images、volumes、networks等等。它兼容独立的docker环境和swarm集群模式。基本满足中小型单位对docker容器的管理工作。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。