首页 > 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

【热门文章】
【热门文章】