strtr 是 PHP 高效能字串替換函數,支援「字元對字元」與「陣列對應」兩種模式。本文深度解析其特殊替換規則、效能優勢與最佳實踐模式。
strtr(string, from, to) // 字元對字元模式
strtr(string, array) // 陣列對應模式(推薦)
<?php
echo strtr("I Love you", "Lo", "lO");
// 輸出:I lOve yOu
// 特點:單字元對應、區分大小寫、from/to 長度需相同
?>
⚠️ 陷阱:
to 不能為空字串(空格可)you 中的 o 也被替換)<?php
$map = [
'you' => 'her sister',
'Love' => 'hate'
];
echo strtr("I Love you", $map);
// 輸出:I hate her sister
?>
優點:
$map += ['new' => 'rule'];str_replace 快約 4 倍| 情況 | 程式碼 | 結果 | 說明 |
|---|---|---|---|
| from 較短 | strtr("paocai", "pao", "bai123") | baicai | 只替換前 3 字元 |
| from 較長 | strtr("paocai", "pao", "la") | laocai | 多出字元被截斷 |
| 陣列模式 | strtr("paocai", ['ao'=>'oa','ai'=>'ia']) | poacia | 獨立匹配互不干擾 |
<?php
// str_replace:支援陣列搜尋/替換,但會重複掃描字串
echo str_replace("you", "paocai", "I love you!"); // I love paocai!
// strtr 陣列模式:單次掃描完成所有替換,效能更好
$map = ['you'=>'paocai', 'love'=>'hate'];
echo strtr("I love you!", $map); // I hate paocai!
?>
str_replace 可讀性較高strtr 顯著降低 CPU 佔用strtr 不支援正則表達式,複雜模式請用 preg_replace