php 配列をマージできる「array_merge」と「+」演算子のパフォーマンスを計測する

  • 作成日 2021.07.03
  • php
php 配列をマージできる「array_merge」と「+」演算子のパフォーマンスを計測する

phpで、配列をマージできる「array_merge」と「+」演算子のパフォーマンスを計測するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

実行時間計測

microtimeを使用すれば、処理にかかった時間を計測することが可能です。

$startTime = microtime(true);

// 処理を記述

$time = microtime(true) - $startTime; // 処理にかかった時間(ミリ秒)

以下は、配列をマージできる「array_merge」と「+」演算子のパフォーマンスを計測するサンプルコードとなります。
※「array_merge」と「+」演算子が同じ結果になるのは、それぞれのキーに同じものがない場合のみです。

<?php

// 100万回実行
define('COUNT', 1000000); 

$arr1 = ["aaa" => 1, "bbb" => 2, "ccc" => 3];
$arr2 = ["ddd" => 4, "eee" => 5, "fff" => 6];

// 計測開始
$startTime = microtime(true);

$result=[];

for ($i = 0; $i < COUNT; ++$i)
{    
    $result = $arr1 + $arr2;
}

result($startTime,'+');


// 計測開始
$startTime = microtime(true);

$result=[];

for ($i = 0; $i < COUNT; ++$i)
{
    $result = array_merge($arr1,$arr2);
}

result($startTime,'array_merge');

function result($time,$str){
    
    echo '測定結果 : ' . $str . PHP_EOL;
    // 表示は少数第5桁まで
    echo "process time: " . number_format((microtime(true) - $time),5) . ' ミリ秒' . PHP_EOL;    
    echo PHP_EOL;
}

実行結果

[1回目] 
測定結果 : +
process time: 0.01415 ミリ秒

測定結果 : array_merge
process time: 0.03530 ミリ秒

[2回目] 
測定結果 : +
process time: 0.01414 ミリ秒

測定結果 : array_merge
process time: 0.03312 ミリ秒

[3回目] 
測定結果 : +
process time: 0.14007 ミリ秒

測定結果 : array_merge
process time: 0.39760 ミリ秒

「+」演算子の方が倍近く、パフォーマンスが良さそうです。