」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > strtr 與 str_replace:什麼時候應該使用每個 PHP 字串替換函數?

strtr 與 str_replace:什麼時候應該使用每個 PHP 字串替換函數?

發佈於2024-11-12
瀏覽:853

strtr vs str_replace: When should I use each PHP string replacement function?

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 中字串替換的不同方法。了解它們在行為和語法上的細微差別將指導您為您的特定用例選擇合適的函數。

最新教學 更多>
  • 何時以及為何應在 JavaScript 變數名稱中使用美元符號?
    何時以及為何應在 JavaScript 變數名稱中使用美元符號?
    揭示美元符號在JavaScript 中的作用:變數命名指南在JavaScript 領域,美元符號($) 經常出現出現在變數名稱旁邊,激發了新手編碼人員的好奇心。為什麼這個神秘的符號?我們可以簡單地取消它嗎? 兩個符號的故事美元符號,就像下劃線(_)一樣,在 JavaScript 眼中沒有固有的意義。...
    程式設計 發佈於2024-11-19
  • 為什麼早期 C++11 草案中沒有預設移動實作?
    為什麼早期 C++11 草案中沒有預設移動實作?
    為什麼早期 C 11 草案中沒有預設移動實作? 在 C 11 標準的早期版本中,移動構造函數和賦值運算子的隱式生成是辯論的話題。這導致了後續草案的更改,導致目前可用的編譯器中出現以下行為:隱式移動語義自11 月發布C 標準(N3225) 以來,隱式移動構造函數和賦值運算子可以在以下條件下產生:該類別...
    程式設計 發佈於2024-11-19
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-19
  • 如何像 C# 中的 Application.Restart() 一樣重新啟動 Java 應用程式?
    如何像 C# 中的 Application.Restart() 一樣重新啟動 Java 應用程式?
    重新啟動Java 應用程式:綜合解決方案重新啟動Java 應用程式:綜合解決方案在各種場景中都會出現重新啟動Java 應用程式的需要,例如當事件處理程序關閉時觸發以啟動重新啟動。本文深入探討了重新啟動 AWT 應用程式的實用方法,反映了 C# 中 Application.Restart() 的功能。...
    程式設計 發佈於2024-11-19
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-19
  • 在 Python 異常處理中什麼時候應該使用 Try-Except 而不是 If-Else?
    在 Python 異常處理中什麼時候應該使用 Try-Except 而不是 If-Else?
    異常處理中的Try-Except 與If-Else在Python 程式設計中,使用try- except 區塊與if 之間會出現困境-else 語句來處理異常。雖然這兩種方法都是有效的,但某些因素有利於在特定場景中使用 try-except。 有利於Try-Except 的情況:效能增強: 在操作可...
    程式設計 發佈於2024-11-19
  • 如何將 CSS 樣式套用到 jsPDF 文件?
    如何將 CSS 樣式套用到 jsPDF 文件?
    解決 jsPDF 的 CSS 問題您在將 CSS 應用於 jsPDF 文件時面臨著挑戰​​。本指南將根據您提供的資訊深入研究潛在的解決方案。 了解 CSS 包含如上所述,您已經使用了內聯、內部和外部樣式表,但沒有效果。不幸的是,jsPDF 本身並不支援 CSS 應用。 利用列印 CSS 檔案一些論壇...
    程式設計 發佈於2024-11-19
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-19
  • 如何在Python中取得檔案的絕對路徑?
    如何在Python中取得檔案的絕對路徑?
    在 Python 中確定絕對文件路徑作為程式設計師,確定文件的絕對路徑通常是至關重要的。絕對路徑提供檔案的完整位址,包括其磁碟機、目錄和檔案名稱。在 Python 中,取得絕對路徑非常簡單,並且跨平台保持一致。 為了檢索給定檔案的絕對路徑,Python 提供了 os.path.abspath() 函...
    程式設計 發佈於2024-11-19
  • 如何使用 Joda Time 將日期字串轉換為 DateTime 物件?
    如何使用 Joda Time 將日期字串轉換為 DateTime 物件?
    使用Joda Time 將日期字串轉換為DateTime 物件嘗試轉換類似「04/02/2011 20:27」的日期字串時:05" 使用new DateTime("04/02/2011 20:27:05") 到DateTime 對象,由於格式不匹配,可能會出現錯誤。為了...
    程式設計 發佈於2024-11-19
  • 如何在 PHP 中將多維數組展平為一維數組?
    如何在 PHP 中將多維數組展平為一維數組?
    將多維數組轉換為一維數組:PHP 解決方案在PHP 中,遇到包含單元素數組的數組可以進行轉換當旨在獲得一維等價物時面臨挑戰。為了解決這種情況,讓我們探討如何使用內建 PHP 功能有效地展平此類陣列。 1。 array_map('current', $array):對於具有單元素子數組...
    程式設計 發佈於2024-11-19
  • 如何在沒有反向引用的情況下匹配 Go 中的重複字元?
    如何在沒有反向引用的情況下匹配 Go 中的重複字元?
    如何在 Go 中使用正規表示式來匹配任意重複字元? 在本文中,我們將解決匹配任意重複字元的挑戰在 Go 中使用正規表示式重複兩次。在其他正規表示式語法(例如 JavaScript)中,此任務通常很簡單,其中可以簡單地使用反向引用來匹配重複字元。然而,Go 的原生正規表示式引擎 (re2) 不支援反向...
    程式設計 發佈於2024-11-19
  • 如何偵錯 PDO 查詢錯誤:我們可以重建「最終」查詢嗎?
    如何偵錯 PDO 查詢錯誤:我們可以重建「最終」查詢嗎?
    如何深入探究PDO 查詢錯誤的奧秘傳統的PHP 連接SQL 查詢允許透過手動查詢輕鬆進行語法錯誤調試執行時,準備好的PDO 語句的出現帶來了一個獨特的挑戰:缺乏可見的「最終」查詢字串。當資料庫語法錯誤發生時,這可能會讓開發人員摸不著頭腦。 Is the Eluding Query Beyond Gr...
    程式設計 發佈於2024-11-19
  • 用於提升資料庫效能的頂級 ySQL 架構檢查
    用於提升資料庫效能的頂級 ySQL 架構檢查
    A database schema defines the logical structure of your database, including tables, columns, relationships, indexes, and constraints that shape how da...
    程式設計 發佈於2024-11-19
  • 如何修復 MySQL Server 8.0 中的 PASSWORD 函數問題:語法指南
    如何修復 MySQL Server 8.0 中的 PASSWORD 函數問題:語法指南
    解決MySQL Server 8.0 中的PASSWORD 函數問題嘗試在MySQL Server 版本8.0.12 中執行PASSWORD 函數時,某些情況可能會發生觸發錯誤。本文旨在解決此類問題並提供可行的解決方案。 錯誤代碼1064如果您遇到錯誤“Error Code: 1064. You h...
    程式設計 發佈於2024-11-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3