从带分隔符的字符串中删除尾随的分隔字符


Remove trailing delimiting character from a delimited string

从字符串中删除最后一个字符的最快方法是什么?

我有一个像 这样的字符串
a,b,c,d,e,

我想删除最后一个','并获得剩余的字符串:

OUTPUT: a,b,c,d,e

最快的方法是什么?

与所问的问题相反,rtrim()将从字符串的末尾删除在第二个参数中列出的任何数字字符。如果只需要一个逗号,可以使用下面的代码:

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

但是在我的例子中,我有两个字符,一个逗号和一个空格,所以我必须改为

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

,现在它将删除字符串末尾的所有逗号和空格,从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

您可以使用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是否已经有值,如果有,在下一项之前添加逗号,从而在结果中没有额外的逗号。