天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

比較strtr, str_replace和preg_replace三個函數(shù)的效率

之前已經(jīng)分析過strtr的源碼了,現(xiàn)在就比較strtr, str_replace和preg_replace的效率:
復(fù)制代碼 代碼如下:
$str =
'111111110000000000000000000000000000000111000001000100010000010010000010010000010100000010
';
$str = str_repeat($str, 1);
$pattern1 = array('12345'=>'', '67891'=>'');
$pattern2 = array('a'=>'', '1234567890'=>'');
$pattern3 = '/12345|67891/';
$pattern4 = '/a|1234567890/';
$pattern5 = array('12345', '67891');
$pattern6 = array('a', '1234567890'); 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     strtr($str, $pattern1);
}
echo microtime(true)-$t, "/n";        //0.21915886878967   0.47268319129944 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     strtr($str, $pattern2);
}
echo microtime(true)-$t, "/n";        //0.4768660068512    2.7257590293884  
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     preg_replace($pattern3, '', $str);
}
echo microtime(true)-$t, "/n";        //0.30504012107849    1.0864448547363 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     preg_replace($pattern4, '', $str);
}
echo microtime(true)-$t, "/n";        //0.30298089981079    1.117014169693  
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     str_replace($pattern5, '', $str);
}
echo microtime(true)-$t, "/n";        //0.18029189109802    0.22510504722595 
$t = microtime(true);
for($i=0; $i<10000; $i++)
{
     str_replace($pattern6, '', $str);
}
echo microtime(true)-$t, "/n";        //0.18104100227356   0.23055601119995 
//說明:當(dāng)str_repeat的第二個參數(shù)為1時輸出第一個數(shù)字,當(dāng)為8時輸出第二個數(shù)字

從輸出結(jié)果來看,str_replace的整體表現(xiàn)相對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)在執(zhí)行的時候會對search的每一個元素按照先后順序進(jìn)行循環(huán)(不是按照下標(biāo)或者其他的什么順序,這個和數(shù)組在底層的實現(xiàn)有關(guān)),然后到subject中去匹配,如果找到就替換為相應(yīng)的replace。這樣從效率上的確會比strtr好,因為還會多一個從下標(biāo)的最大長度到最小長度的循環(huán),如果這時下標(biāo)字符串的長度變化比較大的話,且subject字符串比較長的話,這里的開銷也是比較大的。不過str_replace這樣的實現(xiàn)也有個我們需要注意的地方,就是它不會像strtr那樣最大匹配優(yōu)先。例如:
 復(fù)制代碼 代碼如下:
 str_replace(array('ab', 'abc'), '1', 'abcd');
 
如果使用的是strtr,我們輸出的結(jié)果會是“1d”,因為strtr會實現(xiàn)最大匹配。但是str_replace卻會輸出“1cd”,因為在search字符串中‘a(chǎn)b'排在“abc”的前面,所以會先把‘a(chǎn)b'替換成了‘1'。

現(xiàn)在小結(jié)一下這三個函數(shù)的用法:
str_replace:
這個應(yīng)該作為字符串替換的首選方法,不過有一點(diǎn)需要注意,就是把最希望匹配的元素放在前面。(為了效率的提升,有時這樣做也是值得的)

strtr: strtr在短字符串替換的時候也是挺高效的,不過search數(shù)組的下標(biāo)長度的差別也對效率產(chǎn)生比較大的影響,還有就是沒事最好不要使用strtr(string, string, string)這種形式(對于非單字節(jié)字符很容易產(chǎn)生亂碼)。

preg_replace:這個不用說,可以使用正則匹配,功能絕對是最強(qiáng)的,不過也是要犧牲一點(diǎn)效率的。

php技術(shù)比較strtr, str_replace和preg_replace三個函數(shù)的效率,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩毛片大全 | 日本强好片久久久久久AAA | 中文字幕在线播放视频 | 凌晨三点免费WWW | 双手绑在床头调教乳尖 | 手机精品在线 | 高中生被C到爽哭视频免费 高挑人妻无奈张开腿 | 国产精品99AV在线观看 | 青青在线视版在线播放 | jizz老师| 国产一区私人高清影院 | 麻豆AV久久无码精品九九 | 扒开老师大腿猛进AAA片软件 | 中文字幕午夜乱理片 | 国产精品久久久久久久伊一 | 久久精品伊人 | 日韩精品无码视频一区二区蜜桃 | 久操久操久操 | 攻把受做哭边走边肉楼梯PLAY | 永久免费在线视频 | AV午夜午夜快憣免费观看 | free高跟丝袜秘书hd | 爱穿丝袜的麻麻3d漫画acg | 暖暖免费 高清 日本社区中文 | 亚洲黄色在线播放 | 亚洲精品天堂自在久久77 | 网友自拍区视频精品 | 日本zljzljzlj精品 | 视频一区视频二区ae86 | 久久综合狠狠综合狠狠 | 母乳女神春日もな | 亚洲AV无码一区二区色情蜜芽 | 久久这里只有热精品18 | 国产成人精品男人的天堂网站 | 国产精品久久久久无码AV色戒 | 国产成在线观看免费视频 | H厨房灌草莓 | 国产专区_爽死777 | 老司机试看午夜 | 亚洲精品色情APP在线下载观看 | 麻花传媒XK在线观看 |