in_arrayとpreg_matchでにたような処理
in_arrayとpreg_matchで候補の文字列にマッチするかどうかを判定することができます。- preg_match('/^(ab|cd|ef)$/', $str)
- in_array($str, array('ab', 'cd', 'ef')
比較対象はつぎの3つです。
- preg_match
- in_array(文字列候補の配列はそのつど生成するばあい)
- 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