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

问题描述 投票:0回答:7

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

我有一个类似的字符串

a,b,c,d,e,

我想删除最后一个“,”并取回剩余的字符串:

OUTPUT: a,b,c,d,e

最快的方法是什么?

php csv delimiter truncate trailing
7个回答
1322
投票

与所提出的问题相反,

rtrim()
将从字符串末尾删除第二个参数中列出的任意数量的字符。如果您只需要一个逗号,则可以使用以下代码:

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

但就我而言,我有 2 个字符,一个逗号和一个空格,所以我必须更改为

$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


1109
投票

您可以使用

substr

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

这将字符串从开头一直隔离到倒数第二个字符。换句话说,它隔离了除最后一个字符之外的整个字符串。

如果最后一个字符可能是多字节,则应使用

mb_substr()


119
投票

substr
的替代函数如下:

substr_replace($string, "", -1)

这是最快的吗?我不知道,但我愿意打赌这些替代方案都太快了,这并不重要

请注意,此函数不是多字节安全的,如果最后一个字符碰巧是多字节字符,则会产生不需要的结果。


18
投票

你可以使用

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

请参阅 PHP 文档中的 substr。它返回字符串的一部分。


5
投票

使用字符串锚点“$”的正则表达式结尾

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

0
投票

如果你真的想替换最后一个字符:

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

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

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

-1
投票

“最快最好的代码是不存在的代码”。

说到边缘情况,循环后面出现的尾随逗号有一个非常常见的问题,例如

$str = ''; foreach ($array as $value) { $str .= "$value,"; }
我想,最初的问题也可能是这种情况。在这种情况下,最快的方法肯定是

根本不添加结尾的逗号:

$str = ''; foreach ($array as $value) { $str .= ($str === '') ? "," : ""; $str .= $value; }
这里我们检查 $str 是否已经有任何值,如果是的话 - 在下一项之前添加一个逗号 

,这样结果中就没有多余的逗号。

© www.soinside.com 2019 - 2024. All rights reserved.