簡體   English   中英

從定界字符串中刪除尾隨定界字符

[英]Remove trailing delimiting character from a delimited string

從字符串中刪除最后一個字符的最快方法是什么?

我有一個像

a,b,c,d,e,

我想刪除最后一個 ',' 並取回剩余的字符串:

OUTPUT: a,b,c,d,e

最快的方法是什么?

與提出的問題相反, rtrim()將從字符串末尾刪除第二個參數中列出的任意數量的字符。 如果您只需要一個逗號,則可以使用以下代碼:

$newarraynama = rtrim($arraynama, ",");

但就我而言,我有 2 個字符,一個逗號和一個空格,所以我不得不改為

$newarraynama = rtrim($arraynama, " ,");

現在它將刪除字符串末尾的所有逗號和空格a, b, c, d, ea, b, c, d, e, , a, b, c, d, e,,,返回 a, b, c, d, e a, b, c, d, e,,, , a, b, c, d, e,a, b, c, d, e , ,, , ,

但是,如果可能有多個逗號,但您只需要刪除最后一個逗號,則根本不應該使用rtrim() - 請參閱其他答案以獲取直接回答問題的解決方案。

但是,如果您不知道是否存在額外字符, rtrim()可能是一個不錯的選擇。 與基於substr的解決方案不同,它將從 a, b, c, d, e 返回a, b, c, d, e a, b, c, d, e

您可以使用substr

echo substr('a,b,c,d,e,', 0, -1);
# => 'a,b,c,d,e'

如果最后一個字符可能是多字節,則應使用mb_substr()代替。

作為函數的substr的替代方法如下:

substr_replace($string, "", -1)

它是最快的嗎? 我不知道,但我願意打賭這些替代方案都非常快,以至於沒關系

請注意,此函數不是多字節安全的,如果最后一個字符恰好是多字節字符,則會產生不希望的結果。

您可以使用

substr(string $string, int $start, int[optional] $length=null);

請參閱 PHP 文檔中的substr 它返回字符串的一部分。

使用字符串錨“$”的正則表達式結尾

$string = preg_replace("/,$/", '', $string);

如果你真的想替換最后一個字符:

$string = "a,b,c,d,e,";

$string[strlen($string)-1] = "";

echo $string; //output: a,b,c,d,e

最快最好的代碼是不存在的代碼”。

說到邊緣情況,循環后出現的尾隨逗號有一個很常見的問題,比如

$str = '';
foreach ($array as $value) {
    $str .= "$value,";
}

我想,最初的問題也可能是這種情況。 在這種情況下,最快的方法肯定是根本不添加尾隨逗號:

$str = '';
foreach ($array as $value) {
    $str .= $str ? "," : "";
    $str .= $value;
}

在這里,我們正在檢查 $str 是否已經有任何值,如果是,則在下一項之前添加一個逗號,因此結果中沒有多余的逗號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM