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

tim*_*fly 7 php performance foreach loops

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

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

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

我的直觉告诉我,第一个选项是更快,因为它做一个循环,而第二个选项是慢,因为在幕后,array_reverse()做某种类型的循环(C语言)的,因此需要两个循环的操作.

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

编辑:只是为了澄清,我知道第一个例子可以使用array_search(),因为这是一个非常简单的例子.主要的问题不是哪一个更快(因为基准可以让我很容易地知道),但为什么,如同在幕后发生的事情一样?

Car*_*los 1

您可以在此处查看函数消耗时间的 PHP 基准,在我看来它们并没有太大不同。为什么?更多代码或更少代码、更少代码或更基本的比较函数比实际函数需要更少的浮点运算,然后这些函数又以基本比较方法(如 array_reverse())进行操作,这些方法不是非常耗时且不需要处理。

http://www.phpbench.com/

编辑:我同意 FuzzyTree 的观点,即您应该关注算法的效率而不是函数本身。