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文字以上は切り捨て
?>