【PHP】文字列の最後の1文字を削除する方法(substr、rtrim)

PHPで文字列の最後の1文字を削除する

ここではPHPで文字列の最後の文字を削除する方法について紹介しています。

文字列の最後の1文字を削除する方法は様々ありますが、簡単な方法としてはsubstr()を使う方法と、rtrim()を使う方法があります。

それぞれについて詳しく解説していきます。

substr()関数を使って文字列の最後の文字を削除する

substr()は文字列の一部を切り出す関数です。

ただしsubstr()で対応できるのはシングルバイトの文字列です。マルチバイトの文字列を扱うときはmb_substr()を使います。

substr()の使い方

substr()の構文は以下のようになっています。

substr(string $string, int $offset, int $length = null)
パラメータ 説明
string 入力文字列
offset 0から数えてoffset番目から始まる文字列が返される。
length lengthが正の場合はoffsetから数えてlength分の文字列を返す。lengthが負の場合は、文字列の最後からlength分の文字が省略される。lengthが指定されない場合はoffsetの位置から文字列の最後までを返す。

ここで注目してほしいのは、lengthが負の値のときは文字列の最後から指定した長さの分だけ文字が省略されるということです。

offset0length-1にすることで文字列の最後の文字を削除することができます。

PHP
$str = '123456789';

echo substr($str, 0, -1);	//12345678 を出力

lengthを正の値にする場合

length-1とするのが一番簡単な方法ですが、正の値で指定することも可能です。

その場合には文字列の長さよりも1文字分短い長さを指定すればOKです。

PHP
$str = '123456789';

echo substr($str,0, strlen($str)-1);	//12345678 を出力

見て分かる通りlengthは負の値を指定した方が簡単ですね。

mb_substr()関数を使って文字列の最後の文字を削除する

mb_substr()はマルチバイトに対応した文字列の一部を切り出す関数です。

処理したい文字列がマルチバイトのときはmb_substr()を使います。

マルチバイトの文字列から最後の1文字を削除する例として

青森県
岩手県
秋田県
東京都

といった文字列の最後の「県」や「都」という文字を削除するといった使い方が考えられます。

mb_substr()の使い方

mb_substr()の構文は以下のようになっています。

mb_substr(string $string, int $offset, int $length = null, string $encoding)
パラメータ 説明
string 入力文字列
offset 0から数えてoffset番目から始まる文字列が返される。
length lengthが正の場合はoffsetから数えてlength分の文字列を返す。lengthが負の場合は、文字列の最後からlength分の文字が省略される。lengthが指定されない場合はoffsetの位置から文字列の最後までを返す。
encoding 文字エンコーディングを指定する。省略もしくはnullの場合は、内部文字エンコーディングを使用。

使い方はsubstr()関数とほぼ同じです。

PHP
$ary = ['青森県','岩手県','秋田県','東京都'];

$ret = [];

foreach($ary as $str)
	$ret[] = mb_substr($str, 0, -1);

$retの値を出力すると以下のようになります。

Array
(
    [0] => 青森
    [1] => 岩手
    [2] => 秋田
    [3] => 東京
)

このやり方で「北海道」という文字列を処理すると「北海」になります。「北海道」という文字列のときに「北海道」を返したい場合は、条件分を入れるなどして処理する必要があります。

rtrim()関数を使って文字列の最後の文字を削除する

rtrim()は文字列の最後から空白もしくはその他の文字を削除する関数です。

rtrim()の使用が向いているのは、文字列の最後にある「空白」(タブや改行を含む)を削除したいときや、削除したい文字が分かっているときです。

注意
rtrim()は最後の1文字を削除するのではなく、対象となる文字が連続していると全て削除されます。例えば文字列の最後にスペースが3個あった場合は、3個のスペースが全て削除されます。

rtrim()の使い方

rtrim()の構文は以下のようになっています。

rtrim(string $string, string $characters = "\n\r\t\v\0")
パラメータ 説明
string 入力文字列
characters 削除する文字を指定する。指定しない場合は空白文字を削除する。

charactersはリストにすることで、複数の文字を指定することができます。

charactersを指定しない場合は、空白文字が削除されます。対象となる空白文字は「スペース」「タブ」「改行」「復帰」「NULLバイト」「垂直タブ」です。

mb_substr()の使い方の例では、「北海道」という文字列を処理するときに条件分岐が必要でした。rtrim()では引数で指定できるので条件分岐が不要です。

PHP
$ary = ['青森県','岩手県','秋田県','東京都','北海道'];

$ret = [];

foreach($ary as $str)
	$ret[] = rtrim($str, '県都');

これを出力すると以下のようになります。

Array
(
    [0] => 青森
    [1] => 岩手
    [2] => 秋田
    [3] => 東京
    [4] => 北海道
)

削除したい文字として「県」「都」を指定したので、「道」は削除されずに残っていることが分かります。

[prism]