以前に strtr のソース コードを分析しました。ここで、strtr、str_replace、preg_replace の効率を比較してみましょう:
コードをコピーします コードは次のとおりです:
$str =
'111111110000000000000000000000 00000000011 1000001000100010000010010000010010000010100000010
';
$str = str_repeat($ str, 1);
$pattern1 = array('12345'=>'', '67891'=>'');
$pattern2 = array('a'=>' ', '1234567890'=> ;'');
$pattern3 = '/12345|67891/';
$pattern5 = '/a|1234567891'; ;
$pattern6 = array( 'a', '1234567890');
$t = microtime(true);
{
strtr($str, $)パターン 1);
エコー マイクロタイム(true)-$t, "/n"; //0.21915886878967 0.47268319129944
$t =
for($i $pattern2);
echo microtime(true)-$t, "/n"; //0.4768660068512 2.7257590293884
$t = microtime(true); $ i++)
{
preg_replace($pattern3, '', $str);
}
echo microtime(true)-$t, "/n" //0.30504012107849 1.0864448547363
$t = microtime(true); $i =0; $i{
preg_replace($pattern4, '', $str);
echo microtime(true)-$t, //0.30298089981079
$t = microtime(true);
for($i=0; $i{
str_replace($pattern5, '', $str);
echo microtime(true)-$t; , " /n"; //0.18029189109802 0.22510504722595
$t = microtime(true);
for($i=0; $i{
str_replace($pattern6, '', $str);
}
echo microtime(true)-$t, "/n"; //0.18104100227356 0.23055601119995
//説明: str_repeat の 2 番目のパラメータが 1 の場合は最初の数値が出力され、8 の場合は 2 番目の数値が出力されます。が出力されます
出力結果から判断すると、str_replace の全体的なパフォーマンスは strtr や preg_replace よりも優れています。その理由は、str_replace のソース コード (http://code.google.com/p/cyy0523xc/source/browse/trunk/php/str_replace%E6%BA%90%E7%A0%81) を見るとわかります。 c)、str_replace(array search, string|array replace, string subject) が実行されると、検索の各要素を順番にループします (添字やその他の順序に従っていません。これは、 array)、次に、一致する件名に移動し、見つかった場合は、対応する置換で置き換えます。この時点で添字文字列の長さが大幅に変化し、対象文字列が比較的長い場合、添字の最大長から最小長までのループが 1 つ増えるため、これは確かに strtr よりも効率的です。ここでのオーバーヘッドも比較的大きくなります。ただし、str_replace の実装には注意が必要です。strtr のように最大一致が優先されるわけではありません。例:
コードをコピー
コードは次のとおりです:
str_replace(array('ab', 'abc'), '1', 'abcd');
strtr が使用される場合、strtr は最大の一致を達成するため、出力結果は「1d」になります。ただし、検索文字列では「ab」が「abc」より前にランク付けされているため、str_replace は「1cd」を出力します。そのため、「ab」は最初に「1」に置き換えられます。
ここで、これら 3 つの関数の使用法を要約しましょう:
str_replace: これは文字列置換の推奨方法ですが、注意すべき点が 1 つあります。それは、最も一致させたい要素を前に置くことです。 。 (効率を向上させるために、これを行う価値がある場合もあります)
strtr: strtr は、短い文字列を置換する場合にも非常に効率的ですが、検索配列の添え字の長さの違いも、検索配列に比較的大きな影響を与えます。また、strtr(string, string, string) という形式は使用しないことをお勧めします (半角文字以外では文字化けが発生しやすいため)。
preg_replace: 言うまでもなく、間違いなく最も強力な機能である通常のマッチングを使用できますが、効率をある程度犠牲にする必要があります。
http://www.bkjia.com/PHPjc/327903.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327903.html技術記事以前に strtr のソース コードを分析しました。ここで、strtr、str_replace、preg_replace の効率を比較してみましょう。 コードを次のようにコピーします。 $str = '111111110000000000000000000000000000000011100...