Liz*_*ard 35 php spl array-map
使用:
for($i=1; $i<= 10000; ++$i) {
$arrayOfNumbers[] = rand(1, 99999);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么存在这样的速度差异:
array_map(array($maxHeap, 'insert'), $arrayOfNumbers);
# Avg Time: 0.92856907844543s
# against
foreach($arrayOfNumbers as $number) {
$maxHeap->insert($number);
}
# Avg Time: 1.3148670101166
Run Code Online (Sandbox Code Playgroud)
$maxHeap
是一个对象 class MaxHeap extends SplMaxHeap
Jar*_*oss 14
据我所知,与Sajith Amma的回答相比,php不会异步做任何事情.
我怀疑这实际上是由于查找的差异$maxHeap->insert
.
使用foreach
您$maxHeap->insert
在当前范围内调用的循环,php解释器必须查找maxHeap
然后insert
在maxHeap
实例上查找.在您运行的脚本范围内,可能还有其他变量可能导致查找速度变慢.
随着array_map
php解释器知道它将调用完全相同$maxHeap->insert
,它只能执行一次查找并在其余迭代中使用相同的"代码地址".
这是由于回调函数和普通函数之间的差异造成的。
在第二个中,使用 foreach 迭代数组,每次迭代调用“insert”函数并等待执行(函数返回控制)并继续下一次迭代。
但在 array_map 函数中,“insert”作为回调函数发生,它调用“insert”并且不等待结果并调用数组中下一项的插入。所以速度更快。
希望能帮助到你。