使用方法:
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
ベストアンサー1
私の知る限り、Sajith Amma の回答とは対照的に、php は非同期的に何も行いません。
これは実際には のルックアップの違いによるものと思われます$maxHeap->insert
。
foreach
現在のスコープ内で呼び出しているループでは、PHP インタープリターはインスタンスを検索してから検索する$maxHeap->insert
必要があります。実行しているスクリプトのスコープ内には、検索を遅くする可能性のある他の変数がある可能性があります。maxHeap
insert
maxHeap
を使用すると、array_map
PHP インタープリターはまったく同じを呼び出すことを認識し$maxHeap->insert
、検索を 1 回だけ実行して、残りの反復処理に同じ「コード アドレス」を使用できます。