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' 不再匹配)
若刻意用 strtr($str, $from, $to) 模擬 str_replace($from, $to, $str),必須確保等長,否則會產生靜默截斷錯誤,極難除錯。
| 場景 | 建議函數 | 理由 |
|---|---|---|
| 單字元/定長對照 | strtr (三參數) | C 層實作,速度最快 |
| 多字元、變長替換 | strtr (陣列) | 單次掃描,避免重複替換 |
| 大量模式替換 | preg_replace | 正則表達式彈性最高 |
| 簡單字串取代 | str_replace | 語意清晰,支援陣列搜尋 |
strtr。strtr。preg_replace。str_replace,可讀性最佳。理解 strtr 的兩種形式與長度限制,能避免「明明代碼沒錯,結果卻不對」的神秘 Bug,提升字串處理可靠度。