php 从分隔字符串中删除尾部分隔字符

yh2wf1be  于 2022-11-21  发布在  PHP
关注(0)|答案(7)|浏览(141)

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

a,b,c,d,e,

我想删除最后一个',',并取回剩下的字符串:

OUTPUT: a,b,c,d,e

最快的方法是什么?

vsikbqxv

vsikbqxv1#

“最快最好的代码是不存在的代码”。
说到边缘情况,循环后出现的尾随逗号有一个很常见的问题,例如

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

我想,第一个问题也可能是这样。在这种情况下,最快的方法肯定是 * 根本不加 * 结尾逗号:

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

这里我们检查$str是否已经有值了,如果有-在下一项之前添加一个逗号 *,这样结果中就没有多余的逗号了。

kh212irz

kh212irz2#

与前面的问题相反,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()可能是一个很好的选择。

gfttwv5a

gfttwv5a3#

您可以使用substr

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

这会将字串从开头隔离到倒数第二个字符(含)。换句话说,它会隔离除了最后一个字符以外的整个字串。
如果最后一个字符可能是多字节,则应使用mb_substr()

41ik7eoe

41ik7eoe4#

substr的替代函数如下:

substr_replace($string, "", -1)

它是最快的吗?我不知道,但我敢打赌,这些替代品都是如此之快,* 这只是无关紧要 *。
请注意,此函数不是多字节安全的,如果最后一个字符恰好是多字节字符,则会产生不希望的结果。

lnxxn5zx

lnxxn5zx5#

您可以使用

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

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

wvt8vs2t

wvt8vs2t6#

使用正则表达式结束字符串锚“$”

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

rkkpypqq7#

如果确实要替换最后一个字符:

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

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

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

相关问题