にゃあ

in_arrayとpreg_matchの速度比較

in_arrayとpreg_matchでにたような処理

in_arrayとpreg_matchで候補の文字列にマッチするかどうかを判定することができます。
  • preg_match('/^(ab|cd|ef)$/', $str)
  • in_array($str, array('ab', 'cd', 'ef')
そこでどちらが、より高速なのか実験してみました。

比較対象はつぎの3つです。

  1. preg_match
  2. in_array(文字列候補の配列はそのつど生成するばあい)
  3. in_array(文字列候補の配列を生成するのは1回だけのばあい)

実験はつぎのようなコードで行いました。

<?php

$str = 'yz';

//
// preg_match test area
//

$startTime = microtime(true);

for ( $i = 0; $i < 100000; $i++ ) {
if ( preg_match('/^(ab|cd|ef|gh|ij|kl|mn|op|qr|st|uv|wx|yz)$/', $str) ) {}
}

$endTime = microtime(true);

echo 'preg_match()<br />';
echo $endTime - $startTime . 'sec<br />';

//
// in_array test area
//

$startTime = microtime(true);

for ( $i = 0; $i < 100000; $i++ ) {
if ( in_array($str, array('ab', 'cd', 'ef', 'gh',
'ij', 'kl', 'mn', 'op', 'qr',
'st', 'uv', 'wx', 'yz')) ) {}
}

$endTime = microtime(true);

echo 'in_array()<br />';
echo $endTime - $startTime . 'sec<br />';

//
// in_array + $array test area
//

$startTime = microtime(true);

$array = array('ab', 'cd', 'ef', 'gh',
'ij', 'kl', 'mn', 'op',
'qr', 'st', 'uv', 'wx', 'yz');
for ( $i = 0; $i < 100000; $i++ ) {
if ( in_array($str, $array) ) {}
}

$endTime = microtime(true);

echo 'in_array() + $array<br />';
echo $endTime - $startTime . 'sec<br />';
?>

実験結果

preg_match()
0.393015146255sec
in_array()
0.468837022781sec
in_array() + $array
0.142140865326sec

結果からいけること

preg_matchのほうがin_arrayよりも高速だった点は意外でした。in_arrayがpreg_matchよりも遅延したのは候補の文字列の配列を毎回生成するためだったとかんがえられます。in_arrayでも候補文字列の配列を1度だけ生成し、かつ、その配列を再利用さえすれば、もっとも高速に処理できることが判明しました。

コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/111

コメントを書く

お名前* URL
本文*
合い言葉* ←「itibo49co」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

コメントはないです。誰かコメント書いてよぅ…。

このブログの著者


Suinと申します。

@suin on Twitter

サブメニュー

最近気になるモノ!

WindowsからMacに乗り換えて半年ですが、Macは細かいところまで丁寧に作られていて、親切なユーザーインターフェイスが気に入ってます。iMacはMagic Mouseと洗練されたデザインのBluetoothキーボードがついてくるので、お得だなあ、なんて思ってます。私に買ってもいいという方、いたら教えてください 笑。

最近のエントリ

XOOPS Cube Dev Ring

最近のコメント

最近のトラックバック

ひとりで喜ぶログ
デュラララに登場するチャットを再現した (04/09)
ひとりで喜ぶログ
デュラララに登場するチャットを再現した (03/28)
http://www15.atpages.jp/~classicalstudio/wordpress/?p=50
getcwd()とdirname(__FILE__)は違う結果になるときがある (12/22)
Re:
CSSのtext-align:center;は<div>には通用しない (12/15)
XOOPS専門-株式会社RYUS - d3blog
Shiori 1.02 (12/02)
9deMaio.com - blog
Koins 1.00 (11/11)
インターネット覚え書き「ビボウログ」
CSSのtext-align:center;は<div>には通用しない (09/16)
hinoeuma1966
CSSのtext-align:center;は<div>には通用しない (07/03)
Suin.org
ブログ作ってみた (03/23)
Suin.org
ブログ作ってみた (03/23)