PHP rtrim函数

PHP rtrim函数,php,string,function,Php,String,Function,结果: abvgd abvgdany_字符串abvgd abvgs abvgsany_字符串abv “s”在哪里?)切断第二个参数中的字符 这意味着它会分别切断a、n、y、、s、t、r、i、n和g,直到这些都不出现在字符串的末尾 如果你想模仿你的行为,你可以用以下方法: $foo = 'abvgd'; // "s" in the end $foos = 'abvgs'; $bar = 'any_string'; $foo_concat = $foo . $bar; $foos_con

结果:

abvgd abvgdany_字符串abvgd

abvgs abvgsany_字符串abv

“s”在哪里?)

切断第二个参数中的字符

这意味着它会分别切断
a
n
y
s
t
r
i
n
g
,直到这些都不出现在字符串的末尾

如果你想模仿你的行为,你可以用以下方法:

$foo  = 'abvgd';

// "s" in the end
$foos = 'abvgs';
$bar  = 'any_string';

$foo_concat  = $foo  . $bar;
$foos_concat = $foos . $bar;

$foo_decode  = rtrim($foo_concat,  $bar);
$foos_decode = rtrim($foos_concat, $bar);

echo "\n$foo  \t $foo_concat  \t $foo_decode";
echo "\n$foos \t $foos_concat \t $foos_decode";
// $foo  == $foo_decode
// $foos != $foos_decode


第二个参数是要删除的所有字符的列表,“任意字符串”包含
g
s
,因此这两个字符都从字符串末尾删除

如果要从另一个字符串的末尾删除整个字符串,可以使用:

<?php
    $totalString = 'this is my string of any_string any_stringany_string';
    $stringToCutOff = 'any_string';

    var_dump(rtrim_string($totalString, $stringToCutOff));
    // string(32) "this is my string of any_string "

    function rtrim_string($string, $stringToCutOff) {
        $stringToCutOffLength = strlen($stringToCutOff);
        while (substr($string, -$stringToCutOffLength) == $stringToCutOff) {
            $string = substr($string, 0, -$stringToCutOffLength);
        }
        return $string;
    }
?>
或者,如果您的目标是从末尾删除某个字符串的所有重复:

$str = preg_replace('#'.preg_quote($toRemove,'#').'$#','',$str);
(以及以上引用之间带有可选空格的选项):

rtrim()
从右侧删除与第二个参数匹配的字符,在您的例子中是其变量
$bar

它使用第二个参数(
$bar
)作为字符列表,因此它单独使用所有字母。在您的例子中,
$foos\u concat=$foos.$bar;//“abvgsany_字符串”

因此,它从
“abvgsany_string”
中删除
“gs”
,因为
g
s
在任何_string(
$bar
)的字符列表中


如果
$foos\u concat
是“
abvgspany\u string”
中有
“p”
,它会给您
“abvgsp”
,因为它的rtrim()和
“p”
不在第二个参数(
$bar
)字符列表中。

第二个参数:
您还可以指定要去除的字符,通过charlist参数。只需列出所有要删除的字符。具有可以指定字符的范围
从技术上讲,正则表达式只匹配字符串的一个实例。在
$
@h2ooooooo之前添加括号和
+
,好吧,这就是重点,如果他添加“any_string”,然后测试从末尾删除“any_string”,似乎目标是替换1个实例。然而他使用的是
rtrim
,它将继续删除,直到什么都不存在(例如
/([any_string]+)$/
)@h2ooooooo是的,但他显然不知道
rtrim
是如何工作的,否则这个问题就不在这里了。我将添加一个替代方案,因为我们无法确定目标是什么。
$str = preg_replace('#('.preg_quote($toRemove,'#').')+$#','',$str);
$str = preg_replace('#(\s*'.preg_quote($toRemove,'#').'\s*)+$#','',$str);