PHP替換字串函數strtr()和str_replace()比較

來源:互聯網
上載者:User

strtr(string,from,to):

逐個字元開始替換,以from跟to中長度較較短的一個為準,例如:
strtr("aidenliu","ai","b") 只替換原始字串中出現的a 輸出:bidenliu
strtr("aidenliu","a","bc") 只替換原始字串中出現的a 輸出:bidenliu
此函數是大小寫敏感的,具如果發生多次替換,每一次替換的藍本都是最原始的那個字串,而不是在前一次替換的基礎上替換,如

 代碼如下 複製代碼
strtr("aidenliu","aA","A@") 會輸出Aidenliu 而不是@idenliu
strtr(string,array):

array 為關聯陣列,用關聯陣列中的值替換原始字串中出現的對應的鍵,如果發生多次替換,每次替換的對像都是最原始的那個字串,而不是在一次替換的基礎上替換(此點與str_replace不同)

 代碼如下 複製代碼
strtr(string,from,to)與 strtr(string,array):
strtr(string,from,to)是逐個字元替換,而strtr(string,array)是字串替換
strtr("aidenliu","ai","") 不發生替換(第二個參數為零長度字串)
strtr("aidenliu",array("ai"=>"")) 發生替換

參考如下文章:
php中替換函數主要有strtr(),str_repalce()這兩個函數,但你們都知道他們這兩個函數的區別和用法嗎?
先來看看這個php字串替換函數 strtr()的兩種用法:
strtr(string,from,to)
或者strtr(string,array)
首先針對strtr函數第一種方式:
我們看看下面的舉例:
 
得到的結果是:
I lOve yOu
這個結果提醒我們:
1.strtr它是區分大小寫
2.strtr的替換是很特殊的,你注意看後面那個yOu,中間的O被替換的,這顯然不是我們的本意。
再舉一個特殊例子,說明這個php的sttr函數的怪異
 
結果是:
I Love you
什麼也不會改變,所以strtr需要注意的是:
3.不能被替換為空白,也就是末位那個參數不能是Null 字元串,當然空格是可以的。
再次舉例strtr函數的另一種情況:
 
結果是:
I lOvEs yOu
注意看第三個參數的A,在結果中並沒有出現。
4.我不建議用strtr以少換多。
ok,既然這個strtr函數挺麻煩為什麼還要用呢?
原因是,它的速度很快。據說,strtr 比 str_replace 快四倍。
5.能用strtr函數的時候一定要用。
那怎麼用才舒服?
這就是它的第二種情況:
strtr(string,array)
6.strtr符合意願的使用方法
 
結果為:
I Love her sister
7.小技巧:你想到替換什麼你就往數組加什麼
比如:
 
結果是:
I hate her sister
再次提醒那個Love 寫成love 是行不通的哦。
字串取代。
文法: string str_replace(string needle, string str, string haystack);
傳回值: 字串
函數種類: 資料處理
內容說明
本函數將字串 str 代入 haystack 字串中,將所有的 needle 置換成 str。mlevine@adtraq.com (11-Apr-1999) 指出在 PHP 3.0.7 版,本函數有些 bug,而 nadeem@bleh.org (05-Jun-1999) 補充在 PHP 3.0.8 版本函數就回複正常了。
使用範例
下例將 %body% 以 black 取代
 
格式:
[@str_replace("要替換的舊內容", "要取代原內容的新字元", $被替換內容的變數名)]
[@str_replace(array('舊1','舊2','舊3'), array('新1','新2','新3'), $被替換內容的變數名)]
[@str_replace(array('舊1','舊2','舊3'), '新內容', $被替換內容的變數名)]
執行個體:
多對一替換:想把內容欄位裡所有的
標籤清除掉,替換成空 [@str_replace(array('
','
'), '', $Content)]
一對一替換:想把內容欄位裡所有的
標籤換成
[@str_replace('
', '
', $Content)]
多對多替換:想把內容欄位裡的
換成
, 同時

,把
全清除 [@str_replace(array('
', '
','
'), array('
','
',''), $Content)]


strtr和str_replace比較


首先這2個函數都是具有替換字元功能的。但是strtr比str_replace效能上要塊4倍。具體情況請看如下分解:
首先是strtr函數:
執行個體1:當

 代碼如下 複製代碼
 
<?php
//這個時候輸出的為baicai而不是bai123cai,因為str("pao")<strlen("bai123")
echo strtr("paocai!","pao","bai123");
?>

執行個體2:當被替換的值長度小於被替換目標的時候

 代碼如下 複製代碼
 
<?php
//這個時候輸出的為laocai而不是lacai,因為str("pao")>strlen("la")  echo strtr("paocai!","pao","la");   ?>

執行個體3:支援數組替換

 

 代碼如下 複製代碼
<?php
$Arr=array('ao'=>'oa','ai'=>'ia');
echo strtr("paocai!",$Arr); //這個時候輸出的為poacia
?>

其次是str_replace:

 

 代碼如下 複製代碼
<?php
echo str_replace("you","paocai","I love you!"); //會輸出I love paocai!
?>

總結:strtr他是跟字元長度有聯絡 的,但是str_replace就沒有聯絡 ,估計在運行步驟的時候會讀取字串長度所以才會比strtr慢很多。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.