LoginSignup
0
1

More than 5 years have passed since last update.

数値→文字変換速度最速王決定戦 in PHP7

Posted at

数値を文字に変換するときにふと気になったのでやってみた。
気になったら業務時間中でも気にせず実験します。
だってエンジニアだもの。

候補

  1. キャストするよ
  2. strvalするよ
  3. 空文字結合するよ

言語問わずよくある子たちですね!

環境

CentOS Linux release 7.3.1611 (Core)
PHP 7.0.15 (cli) (built: Jan 17 2017 17:10:58) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

よくあるLAMP環境です!

結論

1位 227 nsec/1process キャストするよ
2位 264 nsec/1process strvalするよ
3位 378 nsec/1process 空文字結合するよ

せっかちなので結論から行くスタイル。
1億回の処理時間から平均を算出。
キャストが最速。空文字結合は1.5倍程度かかる。

結果詳細

image
10万回を越えたあたりから平均値が安定しだしました。

テストコード

自機でやってみたい人はどうぞ。

<?php
// 時間計測が得意なフレンズ
function calc_time($target_func, $count)
{
  $begin = microtime(true);

  $target_func($count);

  $end = microtime(true);
  return $end-$begin;
}

// strvalが得意なフレンズ
function loop_strval($count = 10000)
{
  $i = 123456789;
  for ($i=0; $i < $count; $i++) {
    $val = strval($i);
  }
}

// 空文字結合が得意なフレンズ
function loop_addstr($count = 10000)
{
  $i = 123456789;
  for ($i=0; $i < $count; $i++) {
    $val = ''.$i;
  }
}

// キャストが得意なフレンズ
function loop_convstr($count = 10000)
{
  $i = 123456789;
  for ($i=0; $i < $count; $i++) {
    $val = (string)$i;
  }
}

// 挑戦者たち
$entries = [
  'loop_strval',
  'loop_addstr',
  'loop_convstr',
];

// カンマ区切りでとりあえず出力(適当)
for ($i=0; $i < 9; $i++) {
  $count = 10 ** $i;
  echo "{$count},";
  foreach ($entries as $entry) {
    $result = calc_time($entry, $count);
    $average = $result / $count;
    echo "{$result},";
  }
  echo "\n";
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1