字串替換
| 函式 | 特性 | 效能 | 適用場景 |
str_replace() | 字面字串替換、支援陣列、大小寫敏感 | 最快 (C 層) | 固定字串、批次替換 |
str_ireplace() | 不分大小寫 | 快 | 關鍵字過濾 |
preg_replace() | 正則表達式、支援回調、捕獲群組 | 較慢 | 複雜模式、格式化 |
str_replace 進階
$search = ['{name}', '{date}'];
$replace = ['John', date('Y-m-d')];
echo str_replace($search, $replace, 'Hello {name}, today is {date}');
// Hello John, today is 2024-05-20
// 計算替換次數
$count = 0;
str_replace('a', 'b', 'aaa', $count);
echo $count; // 3
preg_replace 回調
// 駝峰轉底線
echo preg_replace_callback('/([A-Z])/', fn($m) => '_' . strtolower($m[1]), 'CamelCase');
// _camel_case
// HTML 實體編碼 (排除基本標籤)
echo preg_replace('/&(?!#?\w+;)/', '&', 'A & B'); // A & B
字串分割
| 函式 | 分隔依據 | 回傳 | 效能 |
explode() | 固定字串 | 陣列 | 最快 |
preg_split() | 正則 | 陣列 | 中等 |
str_split() | 固定長度 | 陣列 | 快 |
mb_split() | 正則 (多位元組安全) | 陣列 | 中等 |
explode 參數細節
$str = 'a|b|c|d';
explode('|', $str, 2); // ['a', 'b|c|d'] 正數:最多 N 個元素
explode('|', $str, -1); // ['a', 'b', 'c'] 負數:排除最後 N 個元素 (PHP 5.1+)
preg_split 保留分隔符
preg_split('/(\s+)/', 'a b\tc', -1, PREG_SPLIT_DELIM_CAPTURE);
// ['a', ' ', 'b', '\t', 'c']
字串合併
$parts = ['a', 'b', 'c'];
implode('|', $parts); // 'a|b|c'
// 陣列鍵值合併
$arr = ['name'=>'John', 'age'=>25];
implode(',', array_map(fn($k,$v)=>"$k=$v", array_keys($arr), $arr));
// name=John,age=25
// 空陣列回傳空字串
implode(',', []); // ''
效能與最佳實踐
- 固定字串操作**優先用 str_*/explode/implode**,避免正則開銷
- 大量替換合併為單次
str_replace([...], [...], $str)
- 多位元組字串 (UTF-8) 使用
mb_* 對應函式
- 記憶體敏感場景考慮串流處理而非載入完整字串
相關專題
- 《PHP 字串(string)用法總結》
- 《PHP 陣列(Array)操作技巧大全》