PHP rtrim函数

时间:2013-08-02 11:15:08

标签: php string function

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

3 个答案:

答案 0 :(得分:5)

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

这意味着它会切断any_str,单独ing,直到字符串末尾不存在这些内容。

如果您想模仿您的行为,可以通过以下方式执行此操作:

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

CODEPAD DEMO

答案 1 :(得分:2)

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

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

$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。