php多层数组foreach引用和拷贝的取舍
<?php
$a = [ "a"=>["cc"=>11] , "b"=>["cc"=>22] ];
echo "\n".$a['a']["cc"].",".$a['b']["cc"];
$i=1;
//(1)拷贝,$a无变化
foreach($a as $k=>$v) {
$v['cc']=$i;
$i+=1;
}
echo "\n".$a['a']["cc"].",".$a['b']["cc"];
//(2)引用
foreach($a as $k=>&$v) {
$v['cc']=$i;
$i+=1;
}
echo "\n".$a['a']["cc"].",".$a['b']["cc"];
//(3)拷贝
foreach($a as $k=>$v) {
$a[$k]["cc"]=$i;
$i+=1;
}
echo "\n".$a['a']["cc"].",".$a['b']["cc"];
默认foreach是拷贝数组,需要两倍的内存,那性能是不是会很低啊?为什么要这么设计呢
如果数组非常大的情况下,是不是用引用方式会好一些?各自有什么优缺点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
php5.5开始,遍历的时候可以使用关键字yield,yield的一个功能就是能有效的降低迭代的内存开销,使用yield遍历的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。
参考文档:
http://www.php.net/manual/zh/language.generators.overview.php