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

PHP 字串替換實戰:以 explode 分割重組替換特定子字串

     編輯:PHP 綜合知識

場景

資料庫欄位儲存逗號分隔的語言標籤(如 `English,Mandarin Chinese,French`),需將所有 `Mandarin Chinese` 統一替換為 `Chinese`。資料量大、時間緊,不想寫正則或複雜邏輯。

懶人替換法:explode + implode

<?php
function replaceMandarin() {
    // 假設使用 Drupal 資料庫抽象層 db_query/db_fetch_object
    $sql = db_query("SELECT field_languages_value, nid 
                     FROM {content_type_company_profile} 
                     WHERE field_languages_value LIKE '%Mandarin Chinese%'");
    while ($row = db_fetch_object($sql)) {
        // 以目標字串分割
        $parts = explode("Mandarin Chinese", $row->field_languages_value);
        // 重組:parts[0] + "Chinese" + parts[1] + "Chinese" + parts[2] ...
        $newVal = implode('Chinese', $parts);
        
        db_query("UPDATE {content_type_company_profile} 
                  SET field_languages_value = '%s' WHERE nid = %d", 
                  $newVal, $row->nid);
    }
}
?>

原理說明

  • `explode("Mandarin Chinese", $str)` 將字串在每個 `Mandarin Chinese` 處切開,產生陣列。
  • `implode('Chinese', $parts)` 用 `Chinese` 將陣列元素串接,等效於全域替換。
  • 若原字串不含目標子串,`explode` 回傳單元素陣列,`implode` 還原原字串,安全無副作用。

效能與適用性

方法優點缺點
str_replace內建、快、支援陣列搜尋/替換需注意大小寫、編碼一致
preg_replace正則強大、支援邊界/模式寫法複雜、效能較慢
explode + implode直觀、無正則負擔、記憶體友善僅適合固定字串全域替換

最佳實務建議

  1. 優先使用 `str_replace($search, $replace, $subject)`,原生最優化。
  2. 需正則時用 `preg_replace`,善用分隔符 `#` 避免斜線跳脫。
  3. 大量資料更新時,**批次處理**(每次 100-500 筆)並加上 `LIMIT`,避免長時間鎖表或記憶體溢位。
  4. 更新前先 `SELECT` 驗證影響範圍,備份資料表。

此技巧適用於固定字串全域替換,若需條件替換(如僅替換單詞邊界)請改用正則。

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