PHPのお勉強!

PHP TOP

rtrim

(PHP 4, PHP 5, PHP 7, PHP 8)

rtrim文字列の最後から空白 (もしくはその他の文字) を取り除く

説明

rtrim(string $string, string $characters = " \n\r\t\v\x00"): string

この関数は文字列 string の最後から空白文字 (あるいはその他の文字) を取り除き、 取り除かれた文字列を返します。

2 番目のパラメータを指定しない場合、 rtrim() は以下の文字を削除します:

  • " ": ASCIISP 文字 0x20 、通常のスペース。
  • "\t": ASCIIHT 文字 0x09 、タブ。
  • "\n": ASCIILF 文字 0x0A 、改行(ラインフィード)。
  • "\r": ASCIICR 文字 0x0D 、キャリッジリターン。
  • "\0": ASCIINUL 文字 0x00 、NULバイト。
  • "\v": ASCII VT 文字 0x0B 、垂直タブ。

パラメータ

string
入力文字列。
characters
必要に応じて、削除する文字を characters パラメータで指定することもできます。 削除が必要なすべての文字を単純にリストとして記述してください。 .. を使用することで、連続する文字の範囲を指定することも可能です。

戻り値

変更後の文字列を返します。

例1 rtrim() の使用例

<?php

$text
= "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);

print
"\n";

$trimmed = rtrim($text);
var_dump($trimmed);

$trimmed = rtrim($text, " \t.");
var_dump($trimmed);

$trimmed = rtrim($hello, "Hdle");
var_dump($trimmed);

// trim the ASCII control characters at the end of $binary
// (from 0 to 31 inclusive)
$clean = rtrim($binary, "\x00..\x1F");
var_dump($clean);

?>

上の例の出力は以下となります。

string(32) "        These are a few words :) ...  "
string(16) "    Example string
"
string(11) "Hello World"

string(30) "        These are a few words :) ..."
string(26) "        These are a few words :)"
string(9) "Hello Wor"
string(15) "    Example string"

参考

  • trim() - 文字列の先頭および末尾にあるホワイトスペースを取り除く
  • ltrim() - 文字列の最初から空白 (もしくはその他の文字) を取り除く
add a note

User Contributed Notes 7 notes

up
44
pinkgothic at gmail dot com
14 years ago
I have an obsessive love for php's array functions given how extremely easy they've made complex string handling for me in various situations... so, have another string-rtrim() variant:

<?php

function strrtrim($message, $strip) {
// break message apart by strip string
$lines = explode($strip, $message);
$last = '';
// pop off empty strings at the end
do {
$last = array_pop($lines);
} while (empty(
$last) && (count($lines)));
// re-assemble what remains
return implode($strip, array_merge($lines, array($last)));
}

?>

Astonishingly, something I didn't expect, but: It completely compares to harmor's rstrtrim below, execution time wise. o_o Whee!
up
30
gbelanger at exosecurity dot com
18 years ago
True, the Perl chomp() will only trim newline characters. There is, however, the Perl chop() function which is pretty much identical to the PHP rtrim()

---

Here's a quick way to recursively trim every element of an array, useful after the file() function :

<?php
# Reads /etc/passwd file an trims newlines on each entry
$aFileContent = file("/etc/passwd");
foreach (
$aFileContent as $sKey => $sValue) {
$aFileContent[$sKey] = rtrim($sValue);
}

print_r($aFileContent);
?>
up
26
todd at magnifisites dot com
21 years ago
This shows how rtrim works when using the optional charlist parameter:
rtrim reads a character, one at a time, from the optional charlist parameter and compares it to the end of the str string. If the characters match, it trims it off and starts over again, looking at the "new" last character in the str string and compares it to the first character in the charlist again. If the characters do not match, it moves to the next character in the charlist parameter comparing once again. It continues until the charlist parameter has been completely processed, one at a time, and the str string no longer contains any matches. The newly "rtrimmed" string is returned.
<?php
// Example 1:
rtrim('This is a short short sentence', 'short sentence');
// returns 'This is a'
// If you were expecting the result to be 'This is a short ',
// then you're wrong; the exact string, 'short sentence',
// isn't matched. Remember, character-by-character comparison!
// Example 2:
rtrim('This is a short short sentence', 'cents');
// returns 'This is a short short '
?>
up
21
Unimagined at UnaimaginedDesigns dot Com
19 years ago
I needed a way to trim all white space and then a few chosen strings from the end of a string. So I wrote this class to reuse when stuff needs to be trimmed.

<?php

class cleaner {

function
cleaner ($cuts,$pinfo) {
$ucut = "0";
$lcut = "0";
while (
$cuts[$ucut]) {
$lcut++;
$ucut++;
}
$lcut = $lcut - 1;
$ucut = "0";
$rcut = "0";
$wiy = "start";

while (
$wiy) {

if (
$so) {
$ucut = "0";
$rcut = "0";
unset(
$so);
}

if (!
$cuts[$ucut]) {
$so = "restart";
} else {
$pinfo = rtrim($pinfo);
$bpinfol = strlen($pinfo);
$tcut = $cuts[$ucut];
$pinfo = rtrim($pinfo,"$tcut");
$pinfol = strlen($pinfo);

if (
$bpinfol == $pinfol) {
$rcut++;
if (
$rcut == $lcut) {
unset(
$wiy);
}
$ucut++;
} else {
$so = "restart";
}
}
}

$this->cleaner = $pinfo;
}

}

$pinfo = "Well... I'm really bored...<br /><br>&nbsp; \n\t&nbsp;<br><br /><br>&nbsp; \r\r&nbsp;<br>\r<br /><br>\r&nbsp; &nbsp;\n<br> <br />\t";

$cuts = array('\n','\r','\t',' ',' ','&nbsp;','<br />','<br>','<br/>');

$pinfo = new cleaner($cuts,$pinfo);
$pinfo = $pinfo->cleaner;

print
$pinfo;

?>

That class will take any string that you put in the $cust array and remove it from the end of the $pinfo string. It's useful for cleaning up comments, articles, or mail that users post to your site, making it so there's no extra blank space or blank lines.
up
16
pinkgothic at gmail dot com
11 years ago
On the recurring subject of string-stripping instead of character-stripping rtrim() implementations... the simplest (with a caveat) is probably the basename() function. It has a second parameter that functions as a right-trim using whole strings:

<?php

echo basename('MooFoo', 'Foo');

?>

...outputs 'Moo'.

Since it also strips anything that looks like a directory, it's not quite identical with hacking a string off the end:

<?php

echo basename('Zoo/MooFoo', 'Foo');

?>

...still outputs 'Moo'.

But sometimes it gets the job done.
up
5
harmor
16 years ago
I'm sure there's a better way to strip strings from the end of strings.

<?php
/**
* Strip a string from the end of a string
*
* @param string $str the input string
* @param string $remove OPTIONAL string to remove
*
* @return string the modified string
*/
function rstrtrim($str, $remove=null)
{
$str = (string)$str;
$remove = (string)$remove;

if(empty(
$remove))
{
return
rtrim($str);
}

$len = strlen($remove);
$offset = strlen($str)-$len;
while(
$offset > 0 && $offset == strpos($str, $remove, $offset))
{
$str = substr($str, 0, $offset);
$offset = strlen($str)-$len;
}

return
rtrim($str);

}
//End of function rstrtrim($str, $remove=null)

echo rstrtrim('Hello World!!!', '!') .'<br />'; //"Hello World"
echo rstrtrim('Hello World!!!', '!!') .'<br />'; //"Hello World!"
echo rstrtrim('Hello World!!!', '!!!') .'<br />'; //"Hello World"
echo rstrtrim('Hello World!!!', '!!!!').'<br />'; //"Hello World!!!"
?>
up
-2
HW
21 years ago
<?php
$text
= "This string contains some unwanted characters on the end.";
$text1 = rtrim($text, 'a..z');
$text1 = rtrim($text1, '.');
echo
$text1; // only the '.' is trimmed.
$text2 = rtrim($text, 'a..z.');
echo
$text2; // The whole last word is trimmed.
?>