使用:
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
最佳答案
据我所知,与 Sajith Amma 的回答相反,php 不会异步执行任何操作。
我怀疑这实际上是由于 $maxHeap->insert
的查找不同造成的。
通过 foreach
循环,您在当前范围内调用 $maxHeap->insert
,php 解释器必须查找 maxHeap
然后在 maxHeap
实例上查找 insert
。在您正在运行的脚本范围内,可能存在其他变量,这些变量会使查找速度变慢。
使用 array_map
php 解释器知道它将调用完全相同的 $maxHeap->insert
,它可以只进行一次查找并使用相同的“代码”地址'用于其余的迭代。
关于php - array_map vs 循环和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395909/