0
$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”在哪里?)

4

3 回答 3

5

rtrim()截断第二个参数中的字符

这意味着它会切断a, n, y, _, s, t, r, i,ng单独的,直到字符串末尾都不存在这些。

如果您想模仿自己的行为,可以通过以下方式进行:

<?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;
    }
?>

键盘演示

于 2013-08-02T11:17:55.483 回答
2

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

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

$str = preg_replace('#'.preg_quote($toRemove,'#').'$#','',$str);

或者,如果您的目标是从末尾删除某个字符串的所有重复:

$str = preg_replace('#('.preg_quote($toRemove,'#').')+$#','',$str);

(以及以上出现之间的可选空格):

$str = preg_replace('#(\s*'.preg_quote($toRemove,'#').'\s*)+$#','',$str);
于 2013-08-02T11:19:38.480 回答
1

rtrim()从右侧删除与第二个参数匹配的字符,在您的情况下为它的变量$bar

它将第二个参数 ( $bar) 作为字符列表,因此它单独获取所有字母。在你的情况下,$foos_concat = $foos.$bar; // "abvgsany_string".

所以它"gs"从, 中删除"abvgsany_string",因为g&s在 any_string ( $bar) 的字符列表中。

如果$foos_concat是 " abvgspany_string"with"p"在其中,它会将您"abvgsp"作为它的 rtrim() 并且"p"不在第二个参数 ( $bar) 字符列表中。

于 2013-08-02T11:48:18.520 回答