使用本机PHP功能比在PHP循环中做同样的事情更快吗?为什么?

时间:2014-09-04 18:28:56

标签: php performance loops foreach

这是我一直想知道的事情。当使用本机PHP函数而不是PHP循环等效时,性能总是更好吗?为什么或为什么不呢?

以下两个例子来说明问题:

  • 说我有一个包含1000个元素的大型数组。每个值只是一个整数用户ID。我想知道一个特定的用户标识是否在数组中,我碰巧知道它将朝向数组的末尾(因为它最近会被添加)。我有两个选择:a)执行常规PHP foreach循环,遍历整个数组,直到找到用户ID,或b)在数组上执行array_reverse()并执行相同的foreach }循环直到找到id(如果它存在,它将更快地结束这个循环)。哪个更快?

我的直觉告诉我第一个选项更快,因为它执行一个循环,第二个选项更慢,因为在幕后,array_reverse() 做某种循环(在C),因此需要两个循环来进行操作。

  • 如果我有一个大的多维数组,其中每个值都是[messageid,message],那么使用foreach循环来查找id的特定消息会比将消息类设置为元素的关键点并执行isset(array[messageid]) && array[messageid]

编辑:为了澄清,我知道第一个例子可以使用array_search(),因为这是一个非常简单的例子。主要问题是哪一个更快(因为基准可以让我轻易知道),但是为什么,就像在幕后发生什么一样?

2 个答案:

答案 0 :(得分:1)

你可以在这里看到函数消耗的PHP基准,在我看来它们并没有太大的不同。为什么?更多的代码或更少的代码,更少的代码或更多的基本比较函数比实际函数占用更少的浮点运算,然后这些函数再次在基本比较方法(如array_reverse()中运行,这些方法不是非常耗时且需要处理。

http://www.phpbench.com/

编辑:我同意FuzzyTree,因为你应该专注于算法的效率而不是功能本身。

答案 1 :(得分:-2)

array_xxx()函数由循环组成,它们是最优化的。我不认为你可以通过你的“手工制作”foreach / for / while循环自己做得更好。所以我更喜欢使用预先声明的函数 (顺便说一句,在最原始的编程语言形式中,只有一种循环,但我们能够将它调制成三种形式:))