strtr 與 str_replace:何時使用不同的替換函數
在 PHP 中,strtr 和 str_replace 函數都可以執行字串替換。然而,選擇正確的函數取決於特定的要求和用例。
替換順序的對比
雖然在某些情況下結果輸出可能看起來相同,但有一個兩個函數之間的細微差別:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr 從右到左替換子字串,而str_replace 從左到右替換。當重疊子字串被取代時,這種差異變得明顯:
echo strtr('1 2 3 3', '1 2 3', 'XYZ'); // "1 2 3 Z" echo str_replace(array('1 2 3', '1 2'), array('XYZ', 'AB'), '1 2 3 3'); // "ABXYZ"
替換數組鍵與多個子字串
另一個差異在於如何處理替換數組:
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
在這種情況下,兩個函數都會將字元替換為其對應的陣列值。然而,strtr 需要一個帶有鍵值對的關聯數組,而 str_replace 可以對子字串和替換的簡單數組進行操作。
替換優先權
strtr 根據被替換子字串的長度,降序排列。相反,str_replace 按照替換數組中定義的順序處理替換。這可能會導致不同的結果,如下例所示:
$text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text, array("PHP: Hypertext Preprocessor" => "PHP", "PHP" => "PHP: Hypertext Preprocessor")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor"), array("PHP: Hypertext Preprocessor", "PHP"), $text); var_dump($text_strtr); // string(3) "PHP" var_dump($text_str_replace); // string(27) "PHP: Hypertext Preprocessor"
總之,strtr 和 str_replace 都提供了 PHP 中字串替換的不同方法。了解它們在行為和語法上的細微差別將指導您為您的特定用例選擇合適的函數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3