ワイズリマインダー

PHPで文字列の先頭マッチするかを最速で調べる

ある文字列の先頭にある文字列が存在するかを調べるのを検証してみた
DEMO

結果の一例

strpos
0.0026760101318359 ms
substr
0.18771910667419 ms
preg_match
0.4143500328064 ms
substr_compare
0.18669390678406 ms
strncmp
0.16538405418396 ms

やはりstrposですね

DEMOの内容

  $len = strlen($_REQUEST['needle']);

  function benchFunc($benchName, callable $fn){
    echo "{$benchName}<br>\n";
    $begin = microtime(true);
    for($i=0; $i<LOOP; $i++) $fn();
    echo microtime(time) - $begin . " ms<br>\n";
  };

  benchFunc('strpos', function(){
    0 === strpos($_REQUEST['haystack'], $_REQUEST['needle']);
  });
  benchFunc('substr', function(){
    $_REQUEST['needle'] === substr($_REQUEST['haystack'], 0, $len);
  });
  benchFunc('preg_match', function(){
    preg_match('/^' . $_REQUEST['needle'] . '/', $_REQUEST['haystack']);
  });
  benchFunc('substr_compare', function(){
    0 === substr_compare($_REQUEST['haystack'], $_REQUEST['needle'], 0, $len);
  });
  benchFunc('strncmp', function(){
    0 === strncmp($_REQUEST['haystack'], $_REQUEST['needle'], $len);
  });

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください