1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
/** ------------------------------------------------------------------------
 *   文字列のフォーマット操作関数:関数利用01の例
 *   フォーマット文字列 format に基づき生成された文字列を返す「sprinf,printf」
 *  2015.08.20 作成 yoshi of CXMedia Inc.
 * ------------------------------------------------------------------------- */
header("Content-type:text/plain; charset=UTF-8");

/** ----------------------------------------------
  【sprintf,printf関数(文字列のフォーマット整形)】
    sprintf(format,arg1,arg2, ...);
    フォーマット指定に後に、指定した数の引数(変数等)をコンマ区切りで指定
 --[format] ------------------
   :フォーマット文字列は、通常の文字(%除く)と位置指定子(省略可能)と変換指定子から構成され、
   [位置指定子]:引数の番号付け。「%」の後に前方からの引数に連番を付けて、その後に「$」を付けて指定し、
   以降を変換指定子として指定します。
   変換指定子は、「%」の後に[符号指定子][パディング指定子][表示幅指定子][精度指定子][型指定子]を指定
   これらの指定は、sprintf()場合だけでなく、printf()の場合も同様です。

  [符号指定子]:数値の符号の付加
     指定なし   → マイナス(-)のみ数値に符号を付加
     +          → 数値に必ず符号を付加
  [パディング指定子]: 文字列が正しい長さになるまで、「空白かまたは0」で埋めるかを指定
     半角空白   → 半角空白で埋める
     0          → 0で埋める
     '任意文字  → 任意の文字で埋める
  [表示幅指定子]:数字を(最低)何桁にするかを指定
  [精度指定子]:浮動小数点数に対して何桁まで数字表示するか指定(ピリオド後の桁数)
                  文字列に対しては、切り捨て位置
  [型指定子]:(省略不可)
     s → 引数を文字列として扱い→string
     d → 引数を10進数の整数として扱い→integer
     u → 引数を10進数(符号無し)の整数として扱い→integer
     b → 引数を2進数の整数として扱い→integer
     c → 引数を整数として扱い(ASCII 値の文字表現)→integer
     o → 引数を8進数の整数として扱い→integer
     x → 引数を16進数(小文字)の整数として扱い→integer
     X → 引数を16進数 (大文字)の整数として扱い→integer
     e → 引数を科学記法として扱い (例 1.2e+2)→double
     E → %e と同じ、 大文字を使用(例 1.2E+2)→double
     f → 引数を double として扱い→double
     F → 引数を float として扱い(ロケールに依存なし)→double
     g → %e および %f の短縮形→double
     G → %E および %f の短縮形→double
     % → パーセント:%の文字(引数は不要)
  -------------------------------------------- */

// 変数設定
$num   5;
$place 'テーブル';
$thing 'fruits';

//時刻を整形:「%02d」は、'%'の編集開始の記号、'02'がスペースがあれば0で埋めて2桁数字の表示
echo "■時刻を整形して追加:sprintf(format, var1,var2, ...);\n";
$str sprintf("--%02d時%02d分 記述-- ",
    
date("H"),
    
date("i"));
echo 
"$str\n";

// 文字列と数値の一般形
echo "■文字列と数値の編集\n";
$format "フルーツが %d個、%s上にあります。\n";
echo 
sprintf($format$num$place);
echo 
'文字列と数値の変数指定を間違えるとその変数に型キャスト→';
echo 
sprintf('その%sには、%d個のフルーツ。'."\n",
    
$num,
    
$place);

// 位置指定子による変数位置の指定
echo '■位置指定子「%n$」による変数位置の指定',"\n";
$format  'その%2$sには、%1$d%3$s。';
$format .= 'その素晴らしい%2$sが、%1$d%3$sで満たされている。'."\n";
echo 
sprintf($format$num$place$thing);

// 桁埋め文字の指定
echo "■文字列と数値の編集:桁埋め文字の指定\n";
echo 
sprintf("%'.9d\n"123);  // %後に「'.」「9」桁を指定して、スペースを文字「.」で埋める
echo sprintf("%'.09d\n"123); // %後に「'.」「09」桁を指定して、スペースを文字「0」で埋める

// 位置指定子と他の指定との共用
echo '■位置指定子「%n$」と他の指定との共用',"\n";
$format 'その%2$sには、%1$04d個のフルーツあり'."\n";
echo 
sprintf($format$num$place);

// printf(format, var, ...)
echo '■文字列の桁埋め文字編集の表示:printf(format, string)',"\n";
$str  'fruits';
$str2 'too much fruits';
printf("[%s]\n",      $str);  // 標準の文字列出力
printf("[%10s]\n",    $str);  // 空白を使用して右詰め
printf("[%-10s]\n",   $str);  // 空白を使用して左詰め
printf("[%010s]\n",   $str);  // ゼロ埋めは文字列でも可能
printf("[%'#10s]\n",  $str);  // ゼロ埋めの代わりに独自文字 '#'で埋める'
printf("[%10.12s]\n"$str2); // 左詰めで、12文字以上は切り捨て
?>