PHPの多彩な文字列の表現歩方を学んできたところで、次にテキストをどのように操作することができるのか紹介します。
・文字列と文字列の結合
・便利な文字列操作関数
文字列同士の結合を行うには、ドット演算子「.」を利用します。ドット演算子を使えば、数値や数値が格納されている変数があったとしても、これらを文字列として結合を行います。
<?php
// 単純な文字列の結合の例
$str = "abc" . "def";
echo $str . "\n";
// 数値や変数を混ぜた例
$price = 250;
$str = "Price " . $price . " 円";
echo $str . "\n";
// 少し複雑な結合例
$str = "abc"
. "def"
. "ghi";
echo $str . "\n";
出力結果
abcdef
Price 250 円
abcdefghi
関数とは、引数と呼ばれるデータを受け取り、一定の処理を実行して結果を返す命令のことです。ここでPHPでテキストを操作するのに便利な関数を紹介します。
■基本的な文字列操作関数
ますは、長さを調べたり、一部を取り出したり、検索したりといった基本的な関数から消化します。ちなみに「substr()」などで関数の引数に角括弧がありますが、これは省略可能を意味する記号です。
基本的な文字列関数
trim($str)
$strにある前後の空白を除去する
strlen($str)
文字列の長さを調べてバイト数を返す
substr($str, $start [,$len])
$strで$startから$lenバイトの文字列を返す。$lenを省略すると、$start以後の全ての文字列を返す。$startに負数を指定すると後ろから$lenバイト数を返す。
strpos($str, $kye [,$offset])
$strの中で$kyeが何バイト目に出てくるかを調べて返す。$offsetは検索の開始位置を指定する。
これらの基本的な関数を含め、ここで紹介する関数を使う上で注意しなくてはならないのは、文字数ではなくバイト数であるという部分です。PHP5以前では、多国語化が不十分のため、strlen()やsubstr()などの関数は、文字単位ではなく半角文字(つまりバイト)を単位として動作します。
strlen()は、半角で数えた場合の文字数(すなわちバイト数)を返します。当然、日本語を考慮し文字数を返す命令も用意されています。
<?php
// trim()の利用例
$s = " abc ";
echo trim($s)."\n\n";
// strlen()の利用例
$s = "1234567890";
echo strlen($s)."\n\n";
$s = "漢字";
echo strlen($s)."\n\n";
// substr()の利用
$s = "1234567890";
echo substr($s, 0, 5)."\n";
echo substr($s, 3, 2)."\n";
echo substr($s, 6)."\n";
echo substr($s, -2, 2)."\n\n";
// strpos()の利用例
$s = "abcdefghijk";
echo strpos($s, "c")."\n";
echo strpos($s, "def")."\n\n";
$i = strpos($s, "x");
if( $i === false )
echo "false\n";
else
echo $i."\n";
出力結果
abc
10
4から6(文字コードにより異なる)
12345
45
7890
90
2
3
false
ここで特に注意したいのは、substr()やsubpos()でのバイト数の数え方です。一般的には、先頭の文字を1として数えますが、PHPでは0起点となります。例えば、文字列から一部を取り出すsubstr()で「substr($s,3,2)」と書いた場合、0から数えて3バイト目から2バイトを抜き出すと言う意味になります。また文字列を検索するstrpos()でも、「strpos("abc","c")」と書いた場合、0から数えて3バイト目、つまり2が検索結果となります。
ところで、strpos()の注意点としては、一致する文字が見当たらない場合には、真偽値のfalseを返すという特性があります。そのため、戻り値を調べるとき、形まで一致するかどうか調べる「===」演算子を使って、falseかどうかを調べる必要があります。というのも、PHPでは、条件式で数値0をfalseと同等に見なすためです。つまり、文字列が先頭と一致した場合(戻り値が0の場合)に値としてはfalseと等しくなり、文字列が出現するにも関わらず、文字列が出現しないと判定されてしまいます。この点、ほかのプログラム言語と動作が異なるので注意しましょう。
■書式化を行うprintf()関数
引数で与えられた文字列や数値を一定の書式に変換して出力するprintf()とsprintf()について紹介します。
printf()とsprintf()
printf($format, $args.....)
特定の書式$formatに従って、引数$args.....を出力する
sprintf($format, $args.....)
printf()と同じ書式を返すが、出力せず文字列を返す
例えば、円周率を表示するときに、「%f」と書いた部分に数値を埋め込んで表示することができます。このとき「%.2f」と書くと少数以下2桁に四捨五入し。「%.4f」と書くと、小数点以下を4桁にします。
<?php
$pi = 3.141592;
printf("PI : %f", $pi);
echo "\n";
printf("PI : %.2f", $pi);
echo "\n";
printf("PI : %.4f", $pi);
echo "\n";
出力結果
PI : 3.141592
PI : 3.14
PI : 3.1416
よく使う書式には、以下のようなものがあります。利用例にもありますが、「%5s」や「%8s」のように書くと、文字列を指定のバイト数で右寄せして表示します。
よく使う書式
%s 文字列 printd("[%5s]","abc");
%d 整数 printd("[%5d]",321);
%f 実数 printd("[%.2f]",3.1415);
%x 16進数に変換 printd("[%x]",255);
<?php
printf("[%5s]", "abc");
echo "\n";
printf("[%5d]", 123);
echo "\n";
printf("%03d", 8);
echo "\n";
printf("%.2f", 3.1415);
echo "\n";
printf("%x", 255);
echo "\n";
出力結果
[ abc]
[ 123]
008
3.14
ff