余分な空白・改行を取り除くtrim関数を使おう!〜PHP入門編〜

プログラムの処理で、取得した文字列から不要な空白や文字を取り除く処理は、実際によく使用されます。

この記事では、

・trim関数とは?
・trim関数の基本的な使い方

という基本的な内容から、

・指定した文字を取り除く方法
・trim関数の注意点
・配列の全ての要素の空白を取り除く方法
・文字列の先頭のみ、または末尾の空白のみを取り除く方法
・全角スペースを取り除く方法
・ファイルから不要な文字を取り除く方法

などのtrim関数の応用的な使い方について解説します。

ここではtrim関数で空白や指定した文字を取り除く方法について、詳しく解説します!

目次

trimとは

文字列の先頭と末尾にある余分な空白を取り除きたい場合は、trim関数を使用します。

書き方:

string trim( string $文字列 [, string $character_mask] )

引数:
第一引数には対象の文字列を指定します。

第二引数には$character_maskパラメータを指定します。

$character_maskには、削除したい文字を指定したり、削除したい全ての文字をリストで指定することも可能です。

なお、第二引数を指定しない場合は通常の空白(” “)のほか、

「タブ(”\t”)」「リターン(”\n”)」「改行(”\r”)」「NULL(“\0”)」「垂直タブ(”\x0B”)」

も空白と同様に削除されます。

返り値:
文字列の先頭や末尾の空白を削除した値を返します。

trimの基本的な使い方

ここでは、実際にtrim関数の基本的な使い方を見ていきましょう!

基本的な使い方

以下にtrim関数を使用して、先頭と末尾のスペースを取り除く方法を記述します。

サンプルプログラム1

$text1 = ' samurai ';
$text2 = ' engineer ';

//空白を取り除く
$trm1 = trim($text1);
$trm2 = trim($text2);

var_dump($trm1, $trm2);

実行結果:

string(7) "samurai"
string(8) "engineer"

このサンプルでは先頭と末尾にスペースのある文字列に対して、trim関数を使用して取り除いています。

また、trim関数はリターン\nや文字列の終端を表す\0なども削除できます。

先述したようにタブも空白とみなされるため、先頭または末尾にあった場合は削除されます。

サンプルプログラム2

$text1 = "hello php\n";   // リターン
$text2 = "hello php\0";   // 終端
$text3 = "\t\thello php"; // タブ

//変更前
var_dump($text1, $text2, $text3);

// リターン、NULLを削除
$trm1 = trim($text1);
$trm2 = trim($text2);
$trm3 = trim($text3);

//変更後
var_dump($trm1, $trm2, $trm3);

実行結果:

string(10) "hello php
"
string(10) "hello php"
string(11) "        hello php"
string(9) "hello php"
string(9) "hello php"
string(9) "hello php"

削除する文字を指定する

trim関数は第二引数を指定することで、空白以外に削除したい文字を指定することができます。

第二引数は1文字ずつ指定、または’ABCD’のように複数の削除したい文字を指定することも可能です。

以下にtrim関数で削除文字を指定する方法を記述します。

サンプルプログラム:

<?php

$text = 'ABCDEFGHIJK';

//削除文字を指定して取り除く
$trm1 = trim($text, 'A');
$trm2 = trim($text, 'ABCDE');

var_dump($trm1, $trm2);

?>

実行結果:

string(10) "BCDEFGHIJK"
string(6) "FGHIJK"

trimの注意点

trimは先頭と末尾の文字を取り除きますが注意点もあります。

以下のサンプルを見てください。

$text = 'ABCDEFGHIJK';
$trm = trim($text, 'BAE');

echo $trm;

実行結果:

CDEFGHIJK

このサンプルでは、取り除く文字’BAE’に対して’BA’が取り除かれます。
これは’A’を取り除いたあとに‘B’が先頭の文字になるからです。

Bを取り除いたあとは’C’が先頭の文字になるため、’E’は取り除かれません。

そのため、これが「trim($text, ‘B’)」だったら’B’は取り除かれません。

配列をtrimする方法

配列の各要素に対して空白を取り除きたい場合は、array_map関数を使います。

以下でarray_map関数で空白を削除する方法を記述します。

サンプルプログラム:

$list = array(' apple', ' orange ', ' melon ', ' banana ', ' pineapple ');

$trimList= array_map('trim', $list);

var_dump($trimList);

実行結果:

array(5) {
  [0] =>
  string(5) "apple"
  [1] =>
  string(6) "orange"
  [2] =>
  string(5) "melon"
  [3] =>
  string(6) "banana"
  [4] =>
  string(9) "pineapple"
}

for文を使わずに1行のみで空白を削除できるので、array_map関数は覚えておくと便利です!

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

ltrimの使い方

文字列の先頭(左側)のみ削除したい場合はltrim関数を使用します。

引数の指定方法など基本的な使い方はtrim関数と同様です。

サンプルプログラム:

<?php

$text1 = ' samurai ';
$text2 = "\t\tengineer\t\t";

//空白を取り除く
$trm1 = ltrim($text1);
$trm2 = ltrim($text2);

var_dump($trm1, $trm2);

?>

実行結果:

string(8) "samurai "
string(10) "engineer        "

文字列の先頭(左側)のみ空白が削除されていることがわかりますね!

rtrimの使い方

文字列の末尾(右側)のみ削除したい場合はrtrim関数を使用します。

引数の指定方法など基本的な使い方はtrim関数と同様です。

サンプルプログラム:

<?php

$text1 = ' samurai ';
$text2 = "\t\tengineer\t\t";

//空白を取り除く
$trm1 = rtrim($text1);
$trm2 = rtrim($text2);

var_dump($trm1, $trm2);

?>

実行結果:

string(8) " samurai"
string(10) "        engineer"

文字列の末尾(右側)のみ空白が削除されていることがわかりますね!

trimの応用的な使い方

全角スペースを取り除く

文字列から余分なスペースを取り除きたい場合は、trim関数を使用すれば簡単に取り除けることは紹介したとおりですが、trim関数は基本的に半角のスペースしか削除できません。

例えば、以下のように文字列に全角スペースが入っていた場合はtrimを使用してもスペースの削除ができません。

サンプルプログラム1

$text = ' hello php ';

//スペースを取り除く
$trm1 = trim($text);

var_dump($trm1);

実行結果:

string(15) " hello php "

実行結果のとおり全角スペースは削除されていません。

では、全角スペースを取り除くにはどうすれば良いでしょうか?

答えはmb_convert_kana関数を使用して、文字列の中に含まれている全角スペースを半角スペースに変換したあとにtrimを行います。

mb_convert_kana関数は第一引数に対象の文字列を指定し、第二引数には変換オプションを指定します。

ここでは 全角スペースを半角に変換する“s”を指定します。

第三引数には文字コードを指定します。

サンプルプログラム2

$text = ' hello php ';

//全角スペースを半角に変換
$text = mb_convert_kana($text, "s", 'UTF-8');

//スペースを取り除く
$trm1 = trim($text);

var_dump($trm1);

実行結果:

string(9) "hello php"

mb_convert_kana関数を使用して、全角スペースを半角に変換したあとにtrimを使用すれば全角スペースが削除できることがわかりますね!

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

ファイルに存在する不要なスペースや文字などを取り除いて上書きしたい場合は、ファイルの内容を取得したあとに、1行ずつtrimを実施します。

以下にファイルの内容から不要なスペースを取り除いて、上書きするサンプルを紹介します。

読み込むファイルには、あらかじめ文字列の先頭にスペースが入ったファイルを用意しておきます。

読み込むファイル(php.txt)

 tanaka
 hayashi
 suzuki

サンプルプログラム

// ファイルを読み込みモードで開く
$fp = fopen("php.txt", "r");

// ファイルを1行ずつ取得する
while ($line = fgets($fp)) {
  $text[] = $line;
}

// ファイルを閉じる
fclose($fp);

// ファイルを書き込みモードで開く
$fp = fopen("php.txt", "w");

foreach ($text as $value) {

  // ファイルに書き込む
  $trm = trim($value);
  fwrite($fp, $trm."\r\n");

}

// ファイルを閉じる
fclose($fp);

実行結果(php.txt):

tanaka
hayashi
suzuki

サンプルプログラムではファイルをfpen関数で読み込みモードで開いて、ファイルの内容を1行ずつ取得しています。

そして1行ずつ配列で格納し、ファイルを一旦閉じたあと、再度書き込みモードでファイルを開き、trimした文字列をfwriteでファイルに書き込んでいます。

ファイルのさまざまな読み書きの方法については、以下の記事で詳しく解説しています!

まとめ

ここではtrim関数を使用して、

  • 先頭と末尾の空白を取り除く方法
  • 文字や文字のリストを指定して削除する方法
  • trim関数の注意点
  • 配列の要素の空白を取り除く方法
  • 先頭又は末尾の空白のみを取り除く方法
  • 全角スペースを取り除く方法
  • ファイルから不要な文字を取り除く方法

について解説しました。

取得したデータから不要な空白や文字を取り除く処理は、実際の開発の現場でもよく使用します。

そのため、trim関数の使い方についてはよく理解しておきましょう。

もし、trim関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次