从字符串中删除最后一个字符的最快方法是什么?
我有一根绳子
a,b,c,d,e,
我想删除最后一个','并取回剩余的字符串:
OUTPUT: a,b,c,d,e
最快的方法是什么?
与所问问题相反,rtrim()将从字符串末尾删除第二个参数中列出的任何数字个字符。如果您只期望一个逗号,则可以使用以下代码:
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
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
您可以使用substr:
echo substr('a,b,c,d,e,', 0, -1);# => 'a,b,c,d,e'
这将字符串从开头隔离出来,并包括倒数第二个字符。换句话说,它隔离了除最后一个字符之外的整个字符串。
如果最后一个字符可能是多字节,则应使用mb_substr()。
mb_substr()
您可以使用
substr(string $string, int $start, int[optional] $length=null);
请参见PHP留档中的substr。它返回字符串的一部分。
substr的替代方法如下,作为函数:
substr_replace($string, "", -1)
它是最快的吗?我不知道,但我敢打赌这些替代方案都非常快,这都不重要了。
请注意,此函数不是多字节安全的,如果最后一个字符恰好是多字节字符,则会产生不希望的结果。
“最快最佳代码是不存在的代码”。
说到边缘情况,循环之后出现的尾随逗号有一个很常见的问题,例如
$str = '';foreach ($array as $value) {$str .= "$value,";}
我想,最初的问题也可能是这种情况。在这种情况下,最快的方法肯定是不要添加尾随逗号:
$str = '';foreach ($array as $value) {$str .= $str ? "," : "";$str .= $value;}
在这里,我们检查$str是否已经有任何值,如果有,则在下一个项目中添加逗号之前,从而在结果中没有额外的逗号。
使用字符串锚点“$”的正则表达式结尾
$string = preg_replace("/,$/", '', $string);
如果你真的想要替换最后一个char:
$string = "a,b,c,d,e,"; $string[strlen($string)-1] = ""; echo $string; //output: a,b,c,d,e