array_map と loop と操作の比較 質問する

array_map と loop と操作の比較 質問する

使用方法:

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必要があります。実行しているスクリプトのスコープ内には、検索を遅くする可能性のある他の変数がある可能性があります。maxHeapinsertmaxHeap

を使用すると、array_mapPHP インタープリターはまったく同じを呼び出すことを認識し$maxHeap->insert、検索を 1 回だけ実行して、残りの反復処理に同じ「コード アドレス」を使用できます。

おすすめ記事