處理 CSV 匯出、SQL 拼接、標籤拼裝時,常需移除字串末尾的分隔符(逗號、分號、竖線等)。本文對比三種主流方法的適用場景、效能與語義清晰度。
$str = '1,2,3,4,5,6,'; // 目標:移除最後一個逗號 → '1,2,3,4,5,6'
$newstr = substr($str, 0, -1);
mb_substr)。$newstr = rtrim($str, ',');
'1,2,3,,' 會移除 兩個 逗號,結果為 '1,2,3',可能非預期。$newstr = substr($str, 0, strlen($str) - 1);
strlen 返回位元組數而非字符數,易導致截斷錯誤。substr($str, 0, -1) 或 mb_substr($str, 0, -1)。// 環境:PHP 8.2, 字串長度 20
// substr($str, 0, -1) : 0.042 秒
// rtrim($str, ',') : 0.058 秒
// substr($str,0,strlen-1) : 0.061 秒
substr($str, 0, -1) 最快,差異微小,實際專案中可忽略,優先考慮語義正確性。
// UTF-8 等多位元組編碼
$newstr = mb_substr($str, 0, -1, 'UTF-8');
需要移除尾部字符
│
├─ 確定只移除「最後一個字符」且不關心內容 → substr($str, 0, -1) / mb_substr($str, 0, -1)
│
└─ 確定移除「尾部所有指定字符(如逗號、空白)」 → rtrim($str, ',') / rtrim($str)
substr($str, 0, -1)(ASCII)或 mb_substr($str, 0, -1, 'UTF-8')(多位元組)。rtrim($str, ','),但注意「重複移除」特性。substr($str, 0, strlen($str) - 1)。選對方法不僅能避免 Bug,更能讓代碼語義自文檔化,降低維護認知負荷。