php多层数组foreach引用和拷贝的取舍
本文介绍了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是拷贝数组,需要两倍的内存,那性能是不是会很低啊?为什么要这么设计呢
如果数组非常大的情况下,是不是用引用方式会好一些?各自有什么优缺点?
解决方案
php5.5开始,遍历的时候可以使用关键字yield,yield的一个功能就是能有效的降低迭代的内存开销,使用yield遍历的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。
参考文档:
http://www.php.net/manual/zh/language.generators.overview.php
这篇关于php多层数组foreach引用和拷贝的取舍的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文