欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年06月26日 09:39:26   作者:  
本篇文章是對(duì)strtr, str_replace和preg_replace三個(gè)函數(shù)的效率問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
之前已經(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的第二個(gè)參數(shù)為1時(shí)輸出第一個(gè)數(shù)字,當(dāng)為8時(shí)輸出第二個(gè)數(shù)字

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

 str_replace(array('ab', 'abc'), '1', 'abcd');
 

如果使用的是strtr,我們輸出的結(jié)果會(huì)是“1d”,因?yàn)閟trtr會(huì)實(shí)現(xiàn)最大匹配。但是str_replace卻會(huì)輸出“1cd”,因?yàn)樵趕earch字符串中‘a(chǎn)b'排在“abc”的前面,所以會(huì)先把‘a(chǎn)b'替換成了‘1'。

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

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

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

相關(guān)文章

  • 分享一個(gè)漂亮的php驗(yàn)證碼類

    分享一個(gè)漂亮的php驗(yàn)證碼類

    這篇文章主要為大家分享了一個(gè)漂亮的php驗(yàn)證碼類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • php ckeditor上傳圖片文件名亂碼解決方法

    php ckeditor上傳圖片文件名亂碼解決方法

    文件名亂碼一般是中文導(dǎo)致的,因?yàn)閏keditor使用的是uft8編碼如果我們頁面使用的是gbk或gb2312就有可能出現(xiàn)亂碼問題,解決辦法只要對(duì)上傳文件重命名即可,下面是如何修改程序代碼的方法
    2013-11-11
  • php+mysql數(shù)據(jù)庫查詢實(shí)例

    php+mysql數(shù)據(jù)庫查詢實(shí)例

    這篇文章主要介紹了php+mysql數(shù)據(jù)庫查詢的方法,實(shí)例分析了數(shù)據(jù)庫查詢的原理與完整實(shí)現(xiàn)步驟,并進(jìn)行了針對(duì)性的分析說明,需要的朋友可以參考下
    2015-01-01
  • 不錯(cuò)的dedecms修改實(shí)用集錦

    不錯(cuò)的dedecms修改實(shí)用集錦

    不錯(cuò)的dedecms修改實(shí)用集錦...
    2007-03-03
  • 如何使用PHP批量去除文件UTF8 BOM信息

    如何使用PHP批量去除文件UTF8 BOM信息

    如果PHP文件頭部包含BOM信息,就會(huì)輸出一個(gè)空白,在很多時(shí)候會(huì)帶來問題,比如我們session無法工作、cookie無法設(shè)置等等問題
    2013-08-08
  • php實(shí)現(xiàn)模擬post請(qǐng)求用法實(shí)例

    php實(shí)現(xiàn)模擬post請(qǐng)求用法實(shí)例

    這篇文章主要介紹了php實(shí)現(xiàn)模擬post請(qǐng)求用法,分析了php模擬post請(qǐng)求的三種常見用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • php 攻擊方法之談php+mysql注射語句構(gòu)造

    php 攻擊方法之談php+mysql注射語句構(gòu)造

    由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困難,尤其是注射時(shí)語句的構(gòu)造方面更是個(gè)難點(diǎn),本文主要是借對(duì)Okphp BBS v1.3一些文件得簡(jiǎn)單分析,來談?wù)刾hp+mysql注射語句構(gòu)造方式,希望本文對(duì)你有點(diǎn)幫助。
    2009-10-10
  • php開發(fā)微信支付獲取用戶地址

    php開發(fā)微信支付獲取用戶地址

    微信支付的收貨地址共享功能,主要是統(tǒng)一的管理微信用戶個(gè)人的收貨地址,其收貨地址可以被應(yīng)用于所有可以調(diào)用的開發(fā)者。用戶的收貨地址包含了很多個(gè)人信息,因此該接口必須要通過申請(qǐng),申請(qǐng)的方式可以在mp平臺(tái)上查看到。
    2015-10-10
  • php 靜態(tài)化實(shí)現(xiàn)代碼

    php 靜態(tài)化實(shí)現(xiàn)代碼

    Replace函數(shù)用于將從模版文件中讀取的內(nèi)容中的關(guān)鍵字替換成變量中的內(nèi)容
    2009-03-03
  • 兩千行代碼的PHP學(xué)習(xí)筆記匯總

    兩千行代碼的PHP學(xué)習(xí)筆記匯總

    這篇文章主要介紹了兩千行代碼的PHP學(xué)習(xí)筆記匯總,由黑眼詩人整理匯總,包括了PHP學(xué)習(xí)中各類常見的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論