亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

strtr, str_replace和preg_replace函數的效率有什么區別

發布時間:2021-10-12 13:43:10 來源:億速云 閱讀:161 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關strtr, str_replace和preg_replace函數的效率有什么區別的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

之前已經分析過strtr的源碼了,現在就比較strtr, str_replace和preg_replace的效率:

代碼如下:


$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 
//說明:當str_repeat的第二個參數為1時輸出第一個數字,當為8時輸出第二個數字


從輸出結果來看,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)在執行的時候會對search的每一個元素按照先后順序進行循環(不是按照下標或者其他的什么順序,這個和數組在底層的實現有關),然后到subject中去匹配,如果找到就替換為相應的replace。這樣從效率上的確會比strtr好,因為還會多一個從下標的最大長度到最小長度的循環,如果這時下標字符串的長度變化比較大的話,且subject字符串比較長的話,這里的開銷也是比較大的。不過str_replace這樣的實現也有個我們需要注意的地方,就是它不會像strtr那樣最大匹配優先。例如:
 

復制代碼 代碼如下:


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


如果使用的是strtr,我們輸出的結果會是“1d”,因為strtr會實現最大匹配。但是str_replace卻會輸出“1cd”,因為在search字符串中‘ab'排在“abc”的前面,所以會先把‘ab'替換成了‘1'。

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

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

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

感謝各位的閱讀!關于“strtr, str_replace和preg_replace函數的效率有什么區別”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀集县| 平乡县| 绍兴市| 瑞丽市| 天门市| 阳江市| 安溪县| 固阳县| 武定县| 鄂托克旗| 织金县| 衢州市| 美姑县| 台东市| 旺苍县| 长泰县| 远安县| 罗江县| 合水县| 麟游县| 安龙县| 砚山县| 遂溪县| 句容市| 茌平县| 清苑县| 镇沅| 贡觉县| 泰宁县| 慈溪市| 邳州市| 永新县| 视频| 饶平县| 库车县| 绥阳县| 凌海市| 沙坪坝区| 临泉县| 若尔盖县| 鄂托克前旗|