HOME>WEBプログラム覚書>sprintf()メモ

sprintf()メモ

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

型指定子

数値関係

右は

PHP

  1. <?php
  2. $y = 2008;
  3. $m = 9;
  4. $d = 1;
  5. printf("%型指定子-%型指定子-%型指定子", $y, $m, $d);
  6. ?>

の結果

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

文字列

右は

PHP

  1. <?php
  2. $string = "abc";
  3. printf("%s", $string);
  4. ?>

の結果

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

引数の番号付け/交換

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

サンプル

下記について考える。

PHP

  1. <?php
  2. $name = "KANTENNA";
  3. $year = 2004;
  4.  
  5. $format = "copyright %s since %d";
  6. printf($format, $name, $year);
  7. ?>

実行結果

copyright KANTENNA since 2004

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

PHP

  1. <?php
  2. $format = "copyright %d since %s";
  3. printf($format, $name, $year);
  4. ?>

実行結果

copyright 0 since 2004

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

PHP

  1. <?php
  2. $format = "copyright %2$d since %1$s";
  3. printf($format, $name, $year);
  4. ?>

実行結果


Notice: Undefined variable: s in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2008/09/sprintf.php on line 207
copyright since

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

PHP

  1. <?php
  2. $format = "copyright %s since %d -%s%dにスタートしました-";
  3. printf($format, $name, $year, $name, $year);
  4.  
  5. echo "&lt;br /&gt;";
  6.  
  7. $format = "copyright %1$s since %2$d -%1$sは%2$dにスタートしました-";
  8. printf($format, $name, $year);
  9. ?>

実行結果

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

Notice: Undefined variable: s in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2008/09/sprintf.php on line 231

Notice: Undefined variable: sは in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2008/09/sprintf.php on line 231

Notice: Undefined variable: dにスタートしました in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2008/09/sprintf.php on line 231

Warning: printf(): Too few arguments in /home/users/1/lolipop.jp-dp07173486/web/_/themes/default/views/pg/2008/09/sprintf.php on line 232

符号指定子

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

PHP

  1. <?php
  2. $plus = 1500;
  3. $minus = -1500;
  4. printf("%+d", $plus);
  5. echo "<br />"
  6. printf("%+d", $minus);
  7. ?>

実行結果

+1500
-1500

パディング指定子

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

PHP

  1. <?php
  2. $padding = "abc";
  3.  
  4. printf("[%s]<br />", $padding);
  5. printf("[%10s]<br />", $padding);// 空白右詰め
  6. printf("[%-10s]<br />", $padding);// 空白左詰め
  7. printf("[%010s]<br />", $padding);//0で右詰め
  8. printf("[%#10s]<br />", $padding);//#で右詰め
  9. ?>
[abc]
[ abc]
[abc ]
[0000000abc]
[10s]
投稿日 2008年9月 8日 20:29
カテゴリ PHP
タグ テストコード | 動作確認 | 関数
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1134

コメント

コメントする
Name
Email Address
URL