首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP strtr 函數深度解析:兩種呼叫形式與常見陷阱

     編輯:PHP 綜合知識

函數簽名

string strtr ( string $str , string $from , string $to )
string strtr ( string $str , array $replace_pairs )

形式一:三參數版本

關鍵限制:$from 與 $to 長度必須相同,否則多餘字元會被忽略。

範例演示

<?php
$str = 'a-=b';

// 等長:正常替換
echo strtr($str, '-=', 'CD');   // 輸出 aCDb

// $to 較長:多餘 'E' 被忽略
echo strtr($str, '-=', 'CDE');  // 輸出 aCDb

// $from 較長:多餘 '=' 被忽略
echo strtr($str, '-=', 'C');    // 輸出 aC=b

形式二:陣列對照版本

無長度限制,支援一對多、多對一替換,且一次掃描完成,不會重複替換。

<?php
$str = 'a-=b';
$pairs = [
    '-=' => 'CDE',   // 可對應多字元
    'b'  => 'XYZ'
];
echo strtr($str, $pairs); // 輸出 aCDEXYZ

替換順序與「不重複替換」特性

strtr 採最長優先、左至右掃描,且已替換區塊不會再被掃描:

<?php
$pairs = [
    'ab' => 'X',
    'bc' => 'Y'
];
echo strtr('abc', $pairs); // 輸出 Xc(先匹配最長 'ab','bc' 不再匹配)

常見陷阱:誤用形式一替代 str_replace

若刻意用 strtr($str, $from, $to) 模擬 str_replace($from, $to, $str),必須確保等長,否則會產生靜默截斷錯誤,極難除錯。

效能比較

場景建議函數理由
單字元/定長對照strtr (三參數)C 層實作,速度最快
多字元、變長替換strtr (陣列)單次掃描,避免重複替換
大量模式替換preg_replace正則表達式彈性最高
簡單字串取代str_replace語意清晰,支援陣列搜尋

最佳實務建議

  • 字元級對照(如全半形轉換、編碼轉換)優先用三參數 strtr。
  • 關鍵字過濾、模板標籤替換用陣列版 strtr。
  • 需正則表達式威力時才用 preg_replace。
  • 一般商務邏輯替換用 str_replace,可讀性最佳。

理解 strtr 的兩種形式與長度限制,能避免「明明代碼沒錯,結果卻不對」的神秘 Bug,提升字串處理可靠度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved