2008年09月08日 20:29

sprintf()メモ

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/417

慣れないとなかなか使おうと思わないprintf()。使いこなせばかなり便利なのは間違いない。

型指定子

数値関係

右は


$y = 2008;
$m = 9;
$d = 1;
printf("%型指定子-%型指定子-%型指定子", $y, $m, $d);

の結果

b - 引数を整数として扱い、 バイナリの数値として表現します。 11111011000-1001-1
c - 引数を整数として扱い、その ASCII 値の文字として表現します。 - -
d - 引数を整数として扱い、 10 進数として表現します。 2008-9-1
e - 引数を科学記法として扱います (例 1.2e+2)。 精度の指定子は、PHP 5.2.1 以降では小数点以下の桁数を表します。 それより前のバージョンでは、有効数字の桁数 (ひとつ小さい値) を意味していました。 2.008000e+3-9.000000e+0-1.000000e+0
u - 引数を整数として扱い、符号無しの 10 進数として表現します。 2008-9-1
f - 引数を double として扱い、 浮動小数点数として表現します。 2008.000000-9.000000-1.000000
F - 引数を float として扱い、 浮動小数点数として表現します (ロケールに依存しません)。 PHP 4.3.10 および PHP 5.0.3 以降で使用可能です。 2008.000000-9.000000-1.000000
o - 引数を整数として扱い、 8 進数として表現します。 3730-11-1
x - 引数を整数として扱い、16 進数として (小文字で)表現します。 7d8-9-1
X - 引数を整数として扱い、16 進数として (大文字で)表現します。 7D8-9-1

文字列

右は


$string = "abc";
printf("%s", $string);

の結果

s - 引数を文字列として扱い、表現します。 abc

引数の番号付け/交換

4.0.6以降はフォーマット文字列における引数の番号付け/交換をサポートしている。

サンプル

下記について考える。


$name = "KANTENNA";
$year = 2004;

$format = "copyright %s since %d";
printf($format, $name, $year);


実行結果

copyright KANTENNA since 2004

基本的に置換指示子の順番は、引数の順番と一致させる必要があるので フォーマット文字列が下記の感じだとアウト。

$format = "copyright %d since %s"; printf($format, $name, $year); '); ?>

実行結果

copyright 0 since 2004

この場合、引数の順序を入れ替えるのではなくフォーマット文字列で 順序を指定してあげるのが望ましいとのこと。


$format = "copyright %2$d since %1$s";
printf($format, $name, $year);


実行結果

copyright since

同じ置換指示子を複数回使用する際に引数を増やすこと無く利用できるので便利


$format = "copyright %s since %d -%sは%dにスタートしました-";
printf($format, $name, $year, $name, $year);

echo "<br />";

$format = "copyright %1$s since %2$d -%1$sは%2$dにスタートしました-";
printf($format, $name, $year);

実行結果

copyright KANTENNA since 2004 -KANTENNAは2004にスタートしました-

Warning: printf() [function.printf]: Too few arguments in /home/sites/lolipop.jp/users/lolipop.jp-dp07173486/web/pg/2008/09/sprintf.php on line 251

符号指定子

符号指定子は+-を付与します。これを利用すると正の数にも強制的に + 符号をつけることが出来る。


$plus = 1500;
$minus = -1500;
printf("%+d", $plus);
echo "<br />"
printf("%+d", $minus);

実行結果

+1500
-1500

パディング指定子

文字列が指定の長さになるまで指定文字で埋める。 デフォルトは空白右詰め。空白、0以外で埋める場合はシングルクォーテーション + 指定文字。


$padding = "abc";

printf("[%s]<br />", $padding);
printf("[%10s]<br />", $padding);// 空白右詰め
printf("[%-10s]<br />", $padding);// 空白左詰め
printf("[%010s]<br />", $padding);//0で右詰め
printf("[%"#10s]<br />", $padding);//#で右詰め



<?
$padding = "abc";

printf("[%s]<br />", $padding);
printf("[%10s]<br />", $padding);// 空白右詰め
printf("[%-10s]<br />", $padding);// 空白左詰め
printf("[%010s]<br />", $padding);//0で右詰め
printf("[%"#10s]<br />", $padding);//#で右詰め
?>

sprintf()メモタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/417
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?