php for foreach速度,在PHP中FOR FOR FOREACH的性能

首先,我理解在90%的应用程序的性能差异是完全不相关的,但我只需要知道哪个是更快的构造。那和…

目前在网上可以得到的信息是混乱的。很多人说foreach是坏的,但在技术上它应该更快,因为它假设简化使用迭代器编写数组遍历。迭代器,它们又假定要更快,但在PHP中也显然死了慢(或者这不是一个PHP东西?)。我在谈论数组函数:next()prev()reset()等,好吧,如果他们是偶数的函数,而不是那些看起来像函数的PHP语言特性。

要缩小这一点:我不是有趣的遍历数组的步骤任何超过1(没有负步骤,即反向迭代)。我也不感兴趣的遍历到任意点,只是0到长度。我也没有看到操作数组超过1000个键发生在定期,但我看到一个数组在应用程序的逻辑中被多次遍历!此外,对于操作,很大程度上只有字符串操作和回声。

我到处听到什么:

> foreach是慢的,因此for / while更快

> PHP foreach复制它迭代的数组;使它更快你需要使用引用

>代码如下:$ key = array_keys($ aHash); $ size = sizeOf($ key); for($ i = 0; $ i

这里是我的问题。我写了这个测试脚本:http://pastebin.com/1ZgK07US和无论多少次我运行脚本,我得到这样的东西:

foreach 1.1438131332397

foreach (using reference) 1.2919359207153

for 1.4262869358063

foreach (hash table) 1.5696921348572

for (hash table) 2.4778981208801

简而言之:

> foreach比foreach更快参考

> foreach比for更快

> foreach比用于哈希表快

有人可以解释吗?

>我做错了什么?

>是PHP的foreach引用的东西真的有所作为吗?我的意思是,为什么不复制它,如果你通过引用?

> foreach语句的等价迭代器代码是什么?我看到了几个在网上,但每次我测试他们的时间是关闭;我也测试了几个简单的迭代器结构,但似乎没有得到更好的结果 – 在PHP的数组迭代器是可怕的?

>有没有更快的方法/方法/结构来迭代除了FOR / FOREACH(和WHILE)之外的数组?

PHP版本5.3.0

编辑:答案

在这里的人的帮助下,我能够把所有问题的答案拼凑在一起。我将在这里总结一下:

>“我做错了什么?共识似乎是:是的,我不能在基准中使用echo。就个人而言,我仍然没有看到echo是一些函数与随机的执行时间或任何其他函数是什么不同的 – 这和脚本的能力,只是产生完全相同的结果foreach比一切都更难解释,虽然只是“你使用echo”(我应该是什么应该使用)。但是,我承认测试应该做更好的事情;虽然没有想到一个理想的妥协。

>“是PHP foreach引用的东西真的有所作为吗?我的意思是为什么它不复制它,如果你通过引用传递? ircmaxell表明,是的,进一步的测试似乎证明在大多数情况下引用应该更快 – 虽然给我上面的代码段,绝对不是所有的意思。我接受这个问题可能是太不直观的麻烦在这样的水平,并将需要一些极端,如反编译,以实际确定哪一个更好的每种情况。

>“foreach语句的等效迭代器代码是什么;我已经看到了一些在网上,但每次我测试他们的时机是关闭;我也测试了一些简单的迭代器结构,但似乎没有得到体面结果 – 在PHP中的数组迭代器只是可怕? ircmaxell提供了答案下面;尽管代码可能只对PHP版本> = 5有效

>“有没有更快的方法/方法/结构来迭代除了FOR / FOREACH(和WHILE)之外的数组?感谢你去Gordon的答案。在PHP5中使用新的数据类型应该提高性能或提高内存(根据你的情况,这可能是可取的)。虽然速度上许多新类型的数组似乎不比array()更好,splpriorityqueue和splobjectstorage似乎要快得多。链接提供Gordon:http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/

谢谢大家谁尝试帮助。

我可能坚持foreach(非参考版本)任何简单的遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值