博主信息
博文 2
粉丝 0
评论 2
访问量 2182
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php地址符&
foolzhou的博客
原创
997人浏览过

 今天遇到一个很奇怪的问题

$arr=['a','b','c'];
foreach($arr as &$v){
}
foreach($arr as $v){
}
var_dump($arr);
unset($v);

var_dump($arr);

这段代码相信咋一看都会以为输出的是abc

可是结果是:

array (size=3)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => &string 'b' (length=1)
array (size=3)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'b' (length=1)
  重点在于

2 => &string 'b' (length=1) 这个地方相当于给$v赋值为$arr[2]

原因在于&php的地址符

先来了解一下&的基本用法:

$b = $c = 1;
$a = &$b;
$a = 2;
echo "b=$b,c=$c\n";
$a = &$c;
$a = 100;
$a = 200;
echo "b=$b,c=$c\n";
unset($a);
$a = 500;
echo "b=$b,c=$c\n";
上面$a指定成$b的引用之后,除非再次指定成其他引用,或者unset($a),否则改变$a就是改变对应的$b的值。

对于你这个foreach,也是同样的道理,你把循环单步拆开,就是这个样子:

$v = &$arr[0];
$v  = &$arr[1];
$v  =  &$arr[2];

循环运行到最后的时候,$v是$arr[2]的引用,所以就相当于这么个形式:

$arr[0] = a;
$arr[1] = b;
$v = &$arr[2];
$arr[2] = b;
var_dump($arr);

也就不难理解为什么var_dump会在最后的键值对上打印出一个&的符号了吧。


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
2条评论
布尔运算 2017-10-25 18:09:19
999
2楼
foolzhou 2017-10-25 18:05:28
自己鼓励一下自己哈哈
1楼
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学