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

PHP 刪除字符串最後字符的三種方案:從 substr 到 rtrim 的最佳實踐

     編輯:PHP 綜合知識

典型場景

拼接字符串時常產生尾部多餘分隔符:

$ids = [101, 102, 103];
$str = '';
foreach ($ids as $id) {
    $str .= $id . ',';  // 結果: "101,102,103,"
}
// 需移除最後的逗號

方案一:substr + strlen(傳統教科書式)

$result = substr($str, 0, strlen($str) - 1);  // "101,102,103"

缺點:執行兩次函數調用、需計算長度、多字節字符串下 strlen 返回字節數而非字符數,易導致亂碼。

方案二:substr 負長度截取(簡潔版)

$result = substr($str, 0, -1);  // 直接倒數第一個字符

優點:代碼極簡、單次函數調用。
風險:空字符串時返回空字符串(而非 false),但多字節編碼同樣有截半字符風險。

方案三:rtrim 精準移除指定字符(推薦)

$result = rtrim($str, ',');  // 只移除尾部逗號,保留其他空白

核心優勢:

  • 語義明確:移除尾部特定字符而非截取長度
  • 安全:空字符串、無目標字符時均安全返回原值
  • 多字節友好:按字符而非字節操作
  • 批量支援:rtrim($str, ",;") 同時移除逗號和分號

進階場景:移除最後 N 個字符

// 移除最後 4 個字符 "..."
$str = "Hello World...";
echo substr($str, 0, -4);  // "Hello World"

// 移除尾部多種標點
$str = "Hello World!?.,";
echo rtrim($str, "!?.,");  // "Hello World"

關鍵提醒:返回值必須接收

// ❌ 錯誤:不修改原變量
rtrim($str, ',');
echo $str;  // 仍輸出 "101,102,103,"

// ✅ 正確:接收返回值
$str = rtrim($str, ',');
echo $str;  // "101,102,103"

效能微基準測試

$str = str_repeat('a,', 100000);  // 20萬字符

$t = microtime(true);
for ($i=0; $i<1000; $i++) substr($str, 0, -1);
echo "substr: " . (microtime(true)-$t) . "s\n";  // ~0.08s

$t = microtime(true);
for ($i=0; $i<1000; $i++) rtrim($str, ',');
echo "rtrim: " . (microtime(true)-$t) . "s\n";   // ~0.06s

rtrim 略快且語義更清晰,推薦作為首選方案。

總結建議

場景推薦方案理由
移除固定尾部字符(如逗號、分號)rtrim($str, ',')語義精確、多字節安全、效能優
移除固定長度尾部(如後綴 "...", "...")substr($str, 0, -N)精確控制字符數
移除尾部空白字符rtrim($str)內建支援空格、換行、制表符
複雜模式移除preg_replace('/,$/', '', $str)正則表達式最大靈活性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved