$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
结果:
abvgd abvgdany_string abvgd
abvgs abvgsany_string abv
“s”在哪里?)
答案 0 :(得分:5)
rtrim()
切断了第二个参数中的字符。
这意味着它会切断a
,n
,y
,_
,s
,t
,r
,单独i
,n
和g
,直到字符串末尾不存在这些内容。
如果您想模仿您的行为,可以通过以下方式执行此操作:
<?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;
}
?>
答案 1 :(得分:2)
第二个参数是要删除的所有字符的列表,“any_string”包含g
和s
,因此这两个字符都从字符串的末尾删除。
如果你想从另一个字符串的末尾删除整个字符串,你可以使用:
$str = preg_replace('#'.preg_quote($toRemove,'#').'$#','',$str);
或者,如果您的目标是从末尾删除某个字符串的所有重复:
$str = preg_replace('#('.preg_quote($toRemove,'#').')+$#','',$str);
(以及上面在出现之间有可选空格):
$str = preg_replace('#(\s*'.preg_quote($toRemove,'#').'\s*)+$#','',$str);
答案 2 :(得分:1)
rtrim()
从右侧删除与第二个参数匹配的字符,在您的情况下为其变量$bar
。
它将第二个参数($bar
)作为charlist,因此它将单独收集所有字母。在您的情况下,$foos_concat = $foos.$bar; // "abvgsany_string"
。
所以它从"gs"
移除"abvgsany_string"
,g
&amp; s
位于any_string($bar
)的charlist中。
如果$foos_concat
为“abvgspany_string"
且其中包含"p"
,那么它会给你"abvgsp"
,因为它的rtrim()和"p"
不在第二个参数($bar
)charlist。