<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Suinasia(preg_match())</title>
<link>http://suin.asia/tag/preg_match%28%29</link>
<description>「preg_match()」なエントリー</description>
<language>ja</language>
<lastBuildDate>Thu, 09 Feb 2012 09:21:01 +0900</lastBuildDate>
<docs>http://backend.userland.com/rss/</docs>
<category>preg_match()</category>
<item>
<title>in_arrayとpreg_matchの速度比較</title>
<link>http://suin.asia/2008/11/19/in-array-vs-preg-match.html</link>
<description><![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でも候補文字列の配列を１度だけ生成し、かつ、その配列を再利用さえすれば、もっとも高速に処理できることが判明しました。]]></description>
<pubDate>Wed, 19 Nov 2008 18:05:19 +0900</pubDate>
<guid>http://suin.asia/2008/11/19/in-array-vs-preg-match.html</guid>
<category domain="http://suin.asia/tag/PHP">PHP</category>
<category domain="http://suin.asia/tag/preg_match%28%29">preg_match()</category>
</item>
</channel>
</rss>
