strtr、str_replace、preg_replace_PHP チュートリアルの効率を比較する

WBOY
リリース: 2016-07-21 15:02:39
オリジナル
763 人が閲覧しました

以前に 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: 言うまでもなく、間違いなく最も強力な機能である通常のマッチングを使用できますが、効率をある程度犠牲にする必要があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327903.html技術記事以前に strtr のソース コードを分析しました。ここで、strtr、str_replace、preg_replace の効率を比較してみましょう。 コードを次のようにコピーします。 $str = '111111110000000000000000000000000000000011100...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!