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

PHP substr_replace() 函數指定位置替換子字符串實戰

     編輯:PHP 相關知識

PHP substr_replace() 指定位置替換子字符串

`substr_replace()` 可在字符串指定位置、指定長度替換為新字符串,比 `str_replace()` 更精確可控。本文說明語法、參數、常見用法與進階技巧。

函數語法

mixed substr_replace (
    mixed $string,
    mixed $replacement,
    mixed $start,
    mixed $length = null
)

參數說明

  • `$string`:原字符串或字符串陣列。
  • `$replacement`:替換字符串或陣列。
  • `$start`:起始位置(正數從開頭、負數從結尾)。
  • `$length`:替換長度(正數長度、負數保留結尾字符數、0 僅插入、省略則替換到結尾)。

基本範例:倒計時訊息更新

<?php
$msg = "Warning: System will shutdown in NN minutes!";
$pos = strpos($msg, "NN"); // 找到佔位符位置

echo substr_replace($msg, "15", $pos, 2) . "\n"; // Warning: System will shutdown in 15 minutes!
sleep(600); // 10分鐘後
echo substr_replace($msg, "5", $pos, 2) . "\n";  // Warning: System will shutdown in 5 minutes!
?>

進階用法:陣列批次處理

$strings = [
    "User {name} logged in",
    "User {name} logged out"
];
$replacements = ["Alice", "Bob"];
$starts = [5, 5];
$lengths = [6, 6]; // {name} 長度 6

$results = substr_replace($strings, $replacements, $starts, $lengths);
print_r($results);
// Array ( [0] => User Alice logged in [1] => User Bob logged out )

負數參數技巧

$str = "abcdefghij";

// 從結尾倒數第 3 字符開始替換 2 個字符
echo substr_replace($str, "XY", -3, 2); // abcdefgXYj

// 負數 length:保留結尾 2 字符,其餘替換
echo substr_replace($str, "XY", 2, -2); // abXYij

// length = 0:插入不刪除
echo substr_replace($str, "XY", 3, 0); // abcXYdefghij

常見應用場景

場景實現方式
模板佔位符替換`strpos` 找位置 + `substr_replace` 替換
敏感詞遮罩(手機、身分證)固定位置替換為 `****`
字符串插入(不刪除原字符)`length = 0`
截斷並添加省略號`substr_replace($str, '...', $maxLen)`
格式化輸出(每 N 字符插入分隔符)循環計算位置插入

敏感資訊遮罩範例

function maskPhone($phone) {
    // 13812345678 → 138****5678
    return substr_replace($phone, '****', 3, 4);
}
function maskIdCard($id) {
    // 保留前 6 後 4,中間遮罩
    $len = strlen($id);
    return substr_replace($id, str_repeat('*', $len - 10), 6, $len - 10);
}

效能提示

  • 單次替換 `substr_replace` 比正則 `preg_replace` 快數倍。
  • 大量替換建議先定位位置再批次處理,避免重複掃描。
  • 若需多處替換同一模式,`str_replace` 或 `strtr` 更適合。

掌握 `substr_replace` 的靈活參數,能精準處理各類字符串定點修改需求。

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