給定字符串 $str 和兩個子串 $str1、$str2,將字符串中 $str1 和 $str2 的首次出現位置互換。
function str_swap($str, $str1, $str2) {
$len1 = strlen($str1);
$len2 = strlen($str2);
// 定位第一個子串
$pos1 = strpos($str, $str1);
if ($pos1 === false) return $str; // 未找到直接返回
// 先替換 str1 為 str2
$str = substr_replace($str, $str2, $pos1, $len1);
// 在原 str1 位置之後查找 str2(避免誤匹配剛替換的內容)
$pos2 = strpos($str, $str2, $pos1 + $len1);
if ($pos2 === false) return $str;
// 替換 str2 為 str1
return substr_replace($str, $str1, $pos2, $len2);
}
$str = "This is an example, you see Tom tell Jack something"; $str1 = "Tom"; $str2 = "Jack"; echo str_swap($str, $str1, $str2); // 輸出:This is an example, you see Jack tell Tom something
| 步驟 | 操作 | 關鍵點 |
|---|---|---|
| 1 | strpos($str, $str1) | 獲取首次出現位置 |
| 2 | substr_replace($str, $str2, $pos1, $len1) | 原位置替換,長度精確 |
| 3 | strpos($str, $str2, $pos1 + $len1) | 偏移量關鍵:跳過剛替換的區域,定位原 str2 |
| 4 | substr_replace($str, $str1, $pos2, $len2) | 完成互換 |
strpos 區分大小寫,需不敏感用 stripos為提升代碼可讀性,推薦使用在線格式化工具:
更多字符串操作技巧請參考《php字符串(string)用法總結》、《php正則表達式用法總結》等專題。