str関数、preg関数、ereg関数の速度比較

ereg関数よりpreg関数のほうが速い。preg関数よりstr関数のほうが速い。といわれているので速度比較をしました。

ついでにexplode関数、preg_split関数、split関数も比較してみました。

結果

種類所要時間使用メモリ
str関数2.4752秒1027624B
preg関数 (1)9.3477秒1667800B
preg関数 (2)8.9804秒1667912B
ereg関数7.1608秒1667624B

str関数は飛びぬけて速いです。
単純なパターンだとpreg関数よりereg関数のほうが速いのでしょうか。

サンプルコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$test="";
for($k=0;$k<10000;$k++){
  $test.="/".md5($k)."/";
}

$m=memory_get_usage();
$s=getMicrotime();

for($k=0;$k<1000;$k++){
  // ここにそれぞれのコードを入れます
}

$e=getMicrotime();

echo ($e-$s);
echo "<br />";

echo memory_get_peak_usage();
echo "B";

str関数

  $test=str_replace("/".md5($k)."/","",$test);

preg関数 (1)

  $test=preg_replace("/\/".md5($k)."\//","",$test);

preg関数 (2)

  $test=preg_replace("/".md5($k)."/","",$test);

ereg関数

  $test=ereg_replace("/".md5($k)."/","",$test);

結果

種類所要時間使用メモリ
preg関数(1)0.5110秒2347608B
preg関数(2)0.7374秒2348136B
ereg関数(1)15.6521秒2917616B
ereg関数(2)45.6495秒2918120B

ereg関数は条件が複雑になるほど遅い。

サンプルコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$test="";
for($k=0;$k<10000;$k++){
  $test.="/http://".md5($k)."/test/index.html/";
}

$m=memory_get_usage();
$s=getMicrotime();

for($k=0;$k<1000;$k++){
  // ここにそれぞれのコードを入れます
}

$e=getMicrotime();

echo ($e-$s);
echo "<br />";

echo memory_get_peak_usage();
echo "B";

preg関数 (1)

  preg_replace("/\w+:\/\/\S+/", '"$0"', $test);

preg関数 (2)

  preg_replace("/\w+:\/\/".md5($k)."\S+/", '"$0"', $test);

ereg関数 (1)

  ereg_replace("[[:alpha:]]+://[^[:space:]]+", '"\%%BODY%%"', $test);

ereg関数 (2)

  ereg_replace("[[:alpha:]]+://".md5($k)."[^[:space:]]+", '"\%%BODY%%"', $test);

結果

種類所要時間使用メモリ
explode関数0.7219秒98224B
preg_split関数1.4470秒98208B
split関数6.1549秒98224B

explode関数、preg_split関数、split関数の順に時間がかかる。
特にsplit関数はきわめて遅い。

サンプルコード

<?php

if (!function_exists('getMicrotime')) {
  function getMicrotime() {
    list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
  }
}

$test="";
for($k=0;$k<10;$k++){
  $test.="\t".md5($k);
}

$m=memory_get_usage();
$s=getMicrotime();

for($k=0;$k<100000;$k++){
  // ここにそれぞれのコードを入れます
}

$e=getMicrotime();

echo ($e-$s);
echo "<br />";

echo memory_get_peak_usage();
echo "B";

explode関数

  explode("\t",$test);

preg_split関数

  preg_split("/\t/",$test);

split関数

  split("\t",$test);

関連記事

スポンサーリンク

RTRIM関数 右から空白を削除する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る