最快的方法是从字符串中删除最后一个字符?
我有一个像这样的字符串:
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
。
$string
,然后输出整个内容: echo rtrim("a,b,c,d,e,", ",");
- anonA;B;C;D;
变为A;B;C;D
,但也会将A;B;;;
转换为A;B
。通常希望保留空值之间的分隔符,因为CSV解析器可以需要从字符串本身确定字段数。 - etuardusubstr
函数:echo substr('a,b,c,d,e,', 0, -1);
# => 'a,b,c,d,e'
这个代码从头开始选择字符串到倒数第二个字符,也就是说,它选择整个字符串除了最后一个字符。
如果最后一个字符可能是多字节的,则应该使用mb_substr()
。
trim
和rtrim
不会移除字符串中的最后一个字符。尽管有时它们只移除最后一个字符,但通常会从字符串中移除许多字符。例如,rtrim('Assess','s')
会给出'Asse'而不是'Asses'。这就是为什么这个答案比被接受的答案更好的原因。 - Buttle Butkus$substring = substr($string, 0, strlen($string)-1);
- Unterbelichtetsubstr()
版本的证据:https://3v4l.org/HlsSS - undefined下面是一个函数形式的替代 substr
的方法:
substr_replace($string, "", -1)
它是否最快?我不知道,但我愿意打赌这些替代方案都如此之快,以至于这根本无关紧要。
请注意,该函数不支持多字节,并且如果最后一个字符恰好是多字节字符,则会产生不良结果。
substr_replace($str, $replacement, $start[, $length])
的最后几个参数限制了被“手术干预”的字母。也就是说,_ substr
_只会分析/替换子字符串的字符(在本例中为空)。完成此操作后,剩余未更改的字符串将被连接起来。 - CPHPython使用正则表达式字符串结尾锚点"$"
$string = preg_replace("/,$/", '', $string);
“最快的”代码是不存在的代码。
说到边界情况,循环后面出现逗号这一问题很常见,就像:
$str = '';
foreach ($array as $value) {
$str .= "$value,";
}
我想,在初始的问题中也可能是这种情况。在这种情况下,最快的方法肯定是根本不要添加尾随逗号:
$str = '';
foreach ($array as $value) {
$str .= $str ? "," : "";
$str .= $value;
}
在这里,我们正在检查$str是否已经有任何值,如果是-在下一个项目之前添加逗号,从而在结果中没有额外的逗号。
如果你真的想要替换最后一个字符:
$string = "a,b,c,d,e,";
$string[strlen($string)-1] = "";
echo $string; //output: a,b,c,d,e
致命错误:无法将空字符串分配给字符串偏移量
。 - undefined
trim()
。所以他的意思是“如何从字符串中删除最后特定的字符?”而不是“最后一个”。所有其他答案都是“错误”的。唯一错误的重复标记是这个问题。 - mgutt