是foreach(在这种情况下为PHP5)的数组的“副本”是具有实际开销的直接副本,还是仅是懒惰的副本(写时复制),它仅在检测到写操作时才产生开销?
另一种方法,在多个地方都应注意,是在key($array)上运行foreach -那怎么会更快呢?
解决方法:
好吧,所以我去测量了一下
Test This And This And, uh, This
--------------------------- ---------------------------- ----------------------------
Setup Setup Setup
---------------------------- ---------------------------- ----------------------------
$i = array_fill(0,1000,'1'); $j = array_fill(0,1000,'1'); $j = array_fill(0,1000,'1');
$c = 0; $d = 0; $e = 0;
--------------------------- ---------------------------- ---------------------------
Code Under Test Code Under Test Code Under Test
--------------------------- ------------------------------ --------------------------
foreach ($i as $v) foreach (array_keys($j) as $k) foreach ($i as &$v)
{ $c+= $v; } { $d+= $j[$k]; } { $e+= $v; }
--------------------------- ------------------------------ -------------------------
Tear Down Tear Down Tear Down
--------------------------- ----------------------------- -------------------------
print "c = $c"; print "d = $d"; print "e = $e";
---------------------------- ----------------------------- --------------------------
Test for repetitions. 10000
---------------------------- ----------------------------- -------------------------
c = 10000000 d = 10000000 e = 10000000
---------------------------- ----------------------------- -------------------------
Ran in 1.8540189266205 Ran in 4.0039160251617 Ran in 1.9633851051331
--------------------------- ----------------------------- -------------------------
Winner -0.10936617851257 Looser 2.0405309200287 2nd Best 0
--------------------------- ---------------------------- -------------------------
看起来foreach($a as $v)比array_keys更好,而使用& v则在中间.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。