array_map vs循环和操作

使用:

for($i=1; $i<= 10000; ++$i) { $arrayOfNumbers[] = rand(1, 99999); } 

有人可以解释为什么有这样的速度差异:

 array_map(array($maxHeap, 'insert'), $arrayOfNumbers); # Avg Time: 0.92856907844543s # against foreach($arrayOfNumbers as $number) { $maxHeap->insert($number); } # Avg Time: 1.3148670101166 

$maxHeap是一个对象class MaxHeap extends SplMaxHeap

这是由于callback函数和正常函数之间的区别。

在第二个中,使用foreach迭代数组,每次迭代调用“insert”函数并等待执行(函数返回控制)并继续下一次迭代。

但在array_map函数中,“insert”作为callback函数发生,它调用“insert”,不等待结果,并调用数组中的下一项插入。 所以它更快。

希望能帮助到你。

据我所知,与Sajith Amma的回答相反,php不会asynchronous执行任何操作。

我怀疑这实际上是由于$maxHeap->insert查找的差异。

使用foreach循环,您正在调用当前范围内的$maxHeap->insert ,php解释器必须查找maxHeap然后在maxHeap实例上查找insert 。 在你正在运行的脚本的范围内,可能有其他variables可能会使查找速度变慢。

通过array_map ,php解释器知道它将调用完全相同的$maxHeap->insert ,它只能执行一次查找,并在剩下的迭代中使用相同的“代码地址”。

Interesting Posts