<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
<title>Suinasia(preg_match())</title>
<subtitle>「preg_match()」なエントリー</subtitle>
<link rel="alternate" type="text/html" href="http://suin.asia/tag/preg_match%28%29"/>
<link rel="self" type="application/atom+xml" href="http://suin.asia/feed/atom/tag/preg_match%28%29"/>
<author>
<name>suin</name>
</author>
<updated>2012-02-10T07:44:14Z</updated>
<id>http://example.com/atom1.xml</id>
<entry>
<title>in_arrayとpreg_matchの速度比較</title>
<link href="http://suin.asia/2008/11/19/in-array-vs-preg-match.html"/>
<summary>preg_matchとin_arrayを比較してみたところ、preg_matchのほうが高速だったが、in_arrayもまけてない。</summary>
<published>2008-11-19T09:05:19Z</published>
<updated>2008-11-19T09:05:19Z</updated>
<id>http://suin.asia/2008/11/19/in-array-vs-preg-match.html</id>
<category term="PHP" label="PHP" scheme="http://suin.asia/tag/PHP" />
<category term="preg_match()" label="preg_match()" scheme="http://suin.asia/tag/preg_match%28%29" />
<content type="html" xml:lang="ja" xml:base="http://suin.asia/tag/preg_match%28%29">
<![CDATA[<h3>in_arrayとpreg_matchでにたような処理</h3>
in_arrayとpreg_matchで候補の文字列にマッチするかどうかを判定することができます。
<ul>
<li>preg_match('/^(ab|cd|ef)$/', $str)

</li><li>in_array($str, array('ab', 'cd', 'ef')</li>
</ul>
そこでどちらが、より高速なのか実験してみました。<br /><br />比較対象はつぎの３つです。<br /><br /><ol><li>preg_match</li><li>in_array(文字列候補の配列はそのつど生成するばあい)</li><li>in_array(文字列候補の配列を生成するのは１回だけのばあい）<br /></li></ol><br />実験はつぎのようなコードで行いました。<br /><br /><pre><code class="php">&lt;?php<br /><br />$str = 'yz';<br /><br />//<br />// preg_match test area<br />//<br /><br />$startTime = microtime(true);<br /><br />for ( $i = 0; $i &lt; 100000; $i++ ) {<br />	if ( preg_match('/^(ab|cd|ef|gh|ij|kl|mn|op|qr|st|uv|wx|yz)$/', $str) ) {}<br />}<br /><br />$endTime = microtime(true);<br /><br />echo 'preg_match()&lt;br /&gt;';<br />echo $endTime - $startTime . 'sec&lt;br /&gt;';<br /><br />//<br />// in_array test area<br />//<br /><br />$startTime = microtime(true);<br /><br />for ( $i = 0; $i &lt; 100000; $i++ ) {<br />	if ( in_array($str, array('ab', 'cd', 'ef', 'gh', <br />				'ij', 'kl', 'mn', 'op', 'qr', <br />				'st', 'uv', 'wx', 'yz')) ) {}<br />}<br /><br />$endTime = microtime(true);<br /><br />echo 'in_array()&lt;br /&gt;';<br />echo $endTime - $startTime . 'sec&lt;br /&gt;';<br /><br />//<br />// in_array + $array test area<br />//<br /><br />$startTime = microtime(true);<br /><br />$array = array('ab', 'cd', 'ef', 'gh', <br />				'ij', 'kl', 'mn', 'op', <br />				'qr', 'st', 'uv', 'wx', 'yz');<br />for ( $i = 0; $i &lt; 100000; $i++ ) {<br />	if ( in_array($str, $array) ) {}<br />}<br /><br />$endTime = microtime(true);<br /><br />echo 'in_array() + $array&lt;br /&gt;';<br />echo $endTime - $startTime . 'sec&lt;br /&gt;';<br />?&gt;</code></pre>

<h3>実験結果</h3>
preg_match()<br />0.393015146255sec<br />in_array()<br />0.468837022781sec<br />in_array() + $array<br />0.142140865326sec<br /><br />
<h3>結果からいけること</h3>
preg_matchのほうがin_arrayよりも高速だった点は意外でした。in_arrayがpreg_matchよりも遅延したのは候補の文字列の配列を毎回生成するためだったとかんがえられます。in_arrayでも候補文字列の配列を１度だけ生成し、かつ、その配列を再利用さえすれば、もっとも高速に処理できることが判明しました。]]>
</content>
</entry>
</feed>
