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
,它只能执行一次查找,并在剩下的迭代中使用相同的“代码地址”。