foreach遍历 是如何遍历的 指针问题

php中文网
发布: 2016-06-23 14:17:32
原创
1296人浏览过

foreach遍历是对原数组的拷贝问题

比如$a1=array('a','b','c');
foreach($a1 as $k=>$v){
echo $v,'
';
if($k==1){
$a1[3] ='d';
}
}
var_dump(current($a1));
数组a1在经过foreach遍历时 foreach遍历的是原数组的拷贝 我想问一下 它是先把原数组整体拷贝完后再遍历还是在原数组上一个一个元素进行复制存储在变量$k $v中 存一个然后echo输出一个 看了foreach执行的流程图 认为是第二种。

如果我按第二种法方理解 那么当if($k==1时对原数组进行了写操作 此时foreach会在指针指向第三个元素时进行了真实的拷贝) 在这里我困惑的是foreach的执行流程图要靠原数组的指针一个一个复制存储输出来完成的 而这段代码最后输出$a1的指针却是指向第三个元素C 就不动了 那么按照我第二种理解 指针不动如何完成foreach的遍历呢?

难道是这样理解吗:就是$a1复制一份出来比如是$a2 foreach遍历的实际上是$a2 这样就可以理解老师所讲的这句话:数组遍历的是原数组的拷贝

就是说先整体把$a1复制一份出来 再对$a2的一个一个元素进行存储到变量里然后输出吗




回复讨论(解决方案)

数组有两套指针,一套是你能看到的下标、关联键,另一套是内部的你不能看到的,但可以用next、perv、end等函数操作
foreach 只是把数组的内部指针的副本传了进去,所以你在 foreach 中修改、添加、删除的数组成员,在 foreach 中都是表现不出来的。因为你并没有修改到那个传进去的副本

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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