php 配列を判定する「(array)」と「is_array」のパフォーマンスを計測する

  • 作成日 2021.11.13
  • php
php 配列を判定する「(array)」と「is_array」のパフォーマンスを計測する

phpで、配列を判定する「(array)」と「is_array」のパフォーマンスを計測するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

実行時間計測

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

$startTime = microtime(true);

// 処理を記述

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

以下は、「(array)」と「is_array」を使用して、配列が配列であるtrueを返す場合のコードを判定するコードを1000万回実行して、パフォーマンスを計測するサンプルコードとなります。

<?php

// 1000万回実行
define('COUNT', 10000000); 

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

$var = [1];

for ($i = 0; $i < COUNT; ++$i)
{    
    (array)$var === $var;
}

result($startTime,'(array)');

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

for ($i = 0; $i < COUNT; ++$i)
{
    is_array($var);
}

result($startTime,'is_array');

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

}

実行結果

[1回目] 
測定結果 : (array)
process time: 0.65300 ミリ秒

測定結果 : is_array
process time: 0.53244 ミリ秒

[2回目] 
測定結果 : (array)
process time: 0.65157 ミリ秒

測定結果 : is_array
process time: 0.53253 ミリ秒

[3回目] 
測定結果 : (array)
process time: 0.65170 ミリ秒

測定結果 : is_array
process time: 0.53252 ミリ秒

パフォーマンスは、is_arrayの方がいい結果となりました。

次は、falseを返すパターンを計測してみます。

変数のみを数値に変更して、実行してみます。

$var = 1;

実行結果

[1回目] 
測定結果 : (array)
process time: 0.87287 ミリ秒

測定結果 : is_array
process time: 0.59367 ミリ秒

[2回目] 
測定結果 : (array)
process time: 0.84730 ミリ秒

測定結果 : is_array
process time: 0.53473 ミリ秒

[3回目] 
測定結果 : (array)
process time: 0.85016 ミリ秒

測定結果 : is_array
process time: 0.53273 ミリ秒

trueの時よりも、差が出る形でis_arrayの方がパフォーマンスはいいです。