テキストの操作について【便利な文字列操作関数】 - PHP公式資格初級|Systems Engineer Wiki
Systems Engineer Wiki
訪問者:31,505,245 人目
テキストの操作について【便利な文字列操作関数】
投稿日:2015-01-18 02:43:31
便利な文字列操作関数
関数とは、引数と呼ばれるデータを受け取り、一定の処理を実行して結果を返す命令のことです。 ここで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