Search

検索したいワードを入力してください

2019年02月15日

PHPのtrim関数で文字列から不要なスペースを消す方法

この記事では、trim関数について解説しています。trim関数の基本的な使い方から、具体的な例やサンプルシナリオ、さらにはマルチバイト文字列関数を用いた応用的な使い方まで紹介しています。また、trim関数の注意点についても触れています。

PHPのtrim関数とは

PHPのtrim関数とは、文字列の先頭と末尾から空白や改行、タブなどを取り除く関数です。文字列から余計なものを削除し、きれいにする役割を持っています。

trim関数で取り除けるものは以下の文字列です。

trimがデフォルトで削除する文字列

  • " "(半角スペース)
  • "\n"(リターン)
  • "\t"(タブ)
  • "\r"(改行)
  • "\0"(NULL)
  • "\x0B"(垂直タブ)

どのような時に使うか

PHPプログラムにおいて、文字列の先頭、末尾から上記の文字を取り除き、文字列をきれいに整えたい場合に利用します。

例えば、データベースに保存された文字列を画面に表示させる場合、改行やタブが潜んでいると、画面上での見た目が変になってしまいます。その際に、trim関数で文字列を整えてあげると、画面上に表示された場合でも改行やタブが削除され整った形で表示することができます。

tirm関数を使うことのメリット

trim関数は簡単に文字列から不要なものを取り除くことができます。文字列データを扱う場合はとりあえずtrim関数を作用させておく、ぐらいの感覚で利用できるのもいいです。

直感的に、簡単に、文字列を整えることができる関数であると言えます。

trim関数の使い方

PHPのtrim関数の具体的な使い方について解説します。

trim関数の書き方

trim関数は「trim(文字列)」という形で記述します。この返り値は、文字列の先頭と末尾から削除可能な文字列(上記のリストを参照)の全てを削除した文字列になります。

コード
echo trim(" おはよう ");
echo trim(" おはよう ");
echo trim("
おはよう
");
echo trim("\0おはよう\0");
echo trim("\rおはよう\r");
echo trim("\x0Bおはよう\x0B");


結果
おはようおはようおはようおはようおはようおはよう
※改行やスペース、タブ等が削除され、全ての文字列が連続表示されている

trim関数で削除する文字を指定する

また、削除する文字を指定したい場合は、trim関数の第二引数に指定します。第二引数に指定できる文字は、上記のリストの文字だけでなく任意の文字の指定や復数指定、文字範囲を指定することもできます。この場合も、削除されるのは文字列の先頭と末尾のものになります。

復数の文字を指定する場合は、その文字を並べた文字列を渡します。文字範囲を指定する場合は、範囲の最初と最後の文字を「..」でつなげます。詳しくは以下の例を参照してください。

コード
echo trim("Hello World", 'H');
echo "\n";
echo trim("Hello World", 'h');
echo "\n";
echo trim("Hello World", 'Hd');
echo "\n";
echo trim("Hello World", 'a..h');

結果
ello World //Hが削除された
Hello World //大文字と小文字は区別される
llo Worl //復数の文字を指定できる。
Hello Worl //アルファベット順で「a〜h」の間の文字が削除される。

上記の例のように、先頭や末尾の文字以外でも、文字の指定の仕方によって削除対象となりうる場合があります。予想とは異なる返り値が返ってくることもありますので、十分に気をつけて下さい。

配列をtrimする方法

配列の各要素に対してtrim関数を作用させたい場合、PHPのforeach文を使う方法とPHPのarray_map関数を利用する方法があります。以下のサンプルコードで使い方を見ておきましょう。

サンプルコード

コード
$array = array(' りんご ', ' ばなな ', 'めろん
');
$new_array1 = array();
foreach($array as $value){
$new_array1[] = trim($value);
}
print_r($new_array1);

$new_array2 = array_map('trim', $array);
print_r($new_array2);

結果
Array([0] => りんご, [1] => ばなな, [2] => めろん)
Array([0] => りんご, [1] => ばなな, [2] => めろん)

array_mapに関して、詳しくは以下の公式ドキュメントを参照してください。

trim関数を使うときの注意点

trim関数は、削除対象文字が復数指定された場合に注意が必要です。なぜなら、PHPのtrim関数は文字の削除を再帰的に行うからです。

以下の例を見て下さい。
echo trim('abcdefg', 'gcdfabe');
この処理では空文字が出力されます。第二引数に指定された文字を、文字列の先頭と末端から削除していきます。

この際、削除処理は再帰的に行われるため、aとgが削除された「bcdef」に対しても処理が走ります。結果、全ての文字が削除されるため空文字が出力されてしまいます。

trimの動作確認

上記の注意点を実際のプログラムで見てみましょう。
コード
echo trim('aefffffe', 'ae');
結果
fffff

efffffという文字列を期待していたにもかかわらず、2文字目のeも削除されてしまい、想定外の文字列が返ってきてしまいます。

trim関数で削除文字指定をする際は、このポイントに注意して利用しましょう。

PHPで文字列の先頭または末尾のみを取り除く

場合によっては、文字列の先頭の文字だけ、末尾の文字だけ削除したいとなることも多いです。しかし、その場合だとtrim関数だと少し不便です。PHPではこういった用途に答えられる関数として、以下の関数を定義しています。

  • ltrim関数
  • rtrim関数

ここでは、上記2つの関数について解説していきます。

文字列の先頭から削除するltrim関数の使い方

PHPのltrim関数は、文字列の先頭から文字を削除する関数です。「left trim」で覚えましょう。「ltrim(文字列)」で記述します。デフォルトで削除する文字は、trim関数の場合と同様です。

また、trim関数と同様に第二引数を取ることができ、削除する文字を指定することができます。trim関数の先頭文字のみ削除するバージョンだと認識すればOKです。

コード
echo ltrim(" おはよう "); //半角スペース
echo ltrim(" おはよう "); //タブ
echo ltrim("
おはよう
"); //改行
echo ltrim('aefffffe', 'ae'); //文字指定


結果
おはよう おはよう おはよう
fffffe

※各文字列の先頭のみ削除対象文字が削除されている。

文字列の末尾から削除するrtrim関数の使い方

PHPのrtrim関数は、文字列の末尾から文字を削除する関数です。「right trim」で覚えましょう。「rtrim(文字列)」で記述します。デフォルトで削除する文字は、trim関数の場合と同様です。

また、trim関数と同様に第二引数を取ることができ、削除する文字を指定することができます。trim関数の末尾文字のみ削除するバージョンだと認識すればOKです。

コード
echo rtrim(" おはよう "); //半角スペース
echo rtrim(" おはよう "); //タブ
echo rtrim("
おはよう
"); //改行
echo rtrim('aefffffe', 'ae'); //文字指定


結果
おはよう おはよう
おはようaefffff

※各文字列の末尾のみ削除対象文字が削除されている。

chop関数の使い方

PHPのchop関数は、rtrimのエイリアスになります。エイリアスとは「別名」のような意味で、rtrimの代わりにchopを指定してもrtrimと同様の処理を行うことができます。

コード
echo chop(" おはよう "); //半角スペース
echo chop(" おはよう "); //タブ
echo chop("
おはよう
"); //改行
echo chop('aefffffe', 'ae'); //文字指定


結果
おはよう おはよう
おはようaefffff

※rtrim関数を作用させた場合と同様の結果となっている

PHPのtrim関数の応用的な使い方

ここでは、trim関数の応用的な使い方を見ていきます。PHPプログラムにおいては、よく利用する使い方ですので、しっかり理解して使いこなせるようにしましょう。

ファイルから不要なスペース・改行を取り除く

例えば、以下のような人名リストファイル(name.txt)があったとします。

田中太郎
岡本次郎
神田篤郎
太宰治

なお、このリストの各文字列の先頭には半角スペースが存在しています。こういったファイルからデータを取得し、webページに表示させるプログラムをPHPで組むことを考えます。

普通にファイルからデータ取得するPHPプログラムは以下のようになります。

コード
$name_list = file('name.txt');
print_r($name_list);


結果
Array
(
[0] => 田中太郎

[1] => 岡本次郎

[2] => 神田篤郎

[3] => 太宰治
)

$name_listをこのままweb表示させると、文字列にスペースや改行が含まれてしまうため、表示が崩れてしまいます。

こういった場合に、trim関数を利用してこのスペースや改行を削除した形で配列に入れ直す処理をしてあげます。

コード
$name_list = file('name.txt');
$name_list = array_map('trim', $name_list);
print_r($name_list);


結果
Array
(
[0] => 田中太郎
[1] => 岡本次郎
[2] => 神田篤郎
[3] => 太宰治
)

結果の配列の各要素からスペースと改行が削除されているのがわかりますでしょうか。このように、ファイルからデータを取得した際にスペースや改行を削除する処理はよく行います。

file関数を利用する際はtrimで改行を削除するように心がけておくと良いでしょう。

全角スペースを取り除く方法

trim関数では正しく全角スペースを取り除くことができません。
コード
echo trim(" おはよう ", " ");
結果
��はよう
このように、文字化けを起こしてしまったり、全角スペースが残ったままになってしまいます。

trim関数で全角スペースを正しく削除するには、PHPのmb_convert_kana関数を用います。

mb_convert_kana関数は、mb_convert_kana(文字列, 変換オプション, 文字コード)と指定することで、文字列の全角と半角の変換を行う関数です。この関数を用いて、全角スペースを半角スペースに変換することで、trim関数でスペースの削除ができるようにします。

なお、mb_convert_kana関数で全角スペースを半角スペースに変換するには、以下のような指定を行う必要があります。
mb_convert_kana(文字列, "s", 'UTF-8');

第二引数には、変換オプションとして公式ドキュメントに規定された文字を渡します。全角スペースから半角スペースに変換する場合は"s"を渡します。

また、第三引数には文字コードを渡します。UTF-8やSJISなどが代表的です。こちらは省略可能であり、その場合はphp.iniなどで設定された内部エンコーディングに従われます。

つまり、全角スペースをmb_convert_kana関数で半角スペースに変換し、その文字列をtrim関数に作用させてスペースを削除していきます。具体的な例を以下に上げますので、参考にしてください。

コード
$sample = " おはよう ";
$sample_converted = mb_convert_kana($sample, "s", "UTF-8");
$sample_trimmed = trim($sample_converted);
echo $sample . "!";
echo "\n";
echo $sample_converted . "!";
echo "\n";
echo $sample_trimmed . "!";


結果
 おはよう !
おはよう !
おはよう!

なお、mb_convert_kana関数などの「mb_」で始まるPHP関数群のことをマルチバイト文字列関数と呼びます。

日本語の全角文字に対してさまざまな処理を行ってくれる便利な関数群なのですが、これらを利用するにはphp.iniの設定を編集する必要があります。詳しくは公式ドキュメント等を参照して頂き、利用できようにしておくとよいでしょう。

trim関数のまとめ

今回は、trim関数について解説していきました。trim関数はPHPの文字列の操作において非常に重要な役割を持った関数です。

利用頻度も高いはずですので、ぜひ使いこなせるようになって下さい。trim関数の注意点も解説しましたので、この注意点を頭においてPHPプログラミングをしていただければと思います。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related