プログラムの処理で、取得した文字列から不要な空白や文字を取り除く処理は、実際によく使用されます。
この記事では、
・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関数の使い方を忘れてしまったら、この記事を思い出してくださいね。