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。
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
文本框组件TextField在应用程序中是使用非常广泛的组件,用户要与应用程序进行交互,那么文本框组件就是一种非常常见的交互方式。顾名思义,文本框组件作用就是接收用户的输入。
Centos中用Chrome将网页导出为PDF,chrome --headless --print-to-pdf https://developer.chrome.com/
mysql-5.7.21 二进制包安装
为了能在虚拟机中访问宿主机的文件夹,所以需要对VMWare来配置文件共享。网上很多文档太过于杂乱,所以这里主要记录相关操作,以便后期快速进行处理。
快速生成表格
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问题