2011年1月21日金曜日

PHPで文字列をパディング (ゼロ埋め、スペース埋め等)


PHPで、文字列や数字を規定の桁数にするために、スペースやゼロなど任意の文字でパディングする方法。

PHPでゼロ埋め(ゼロ パディング)を書いたときにはよくわかっていなかったけど、久しぶりにsprintf()のマニュアルを見たらやっとsprintf() / printf()の使い方がわかった。
でも、単純なゼロ埋めならstr_pad()の方が分かりやすい。(右寄せならsprintf()の方が短いけど。)


str_pad()の場合

$value = 123;
$len = 5;

//デフォルトはスペース埋め
echo str_pad($value, $len); // => "123  "

//指定した文字で埋める
echo str_pad($value, $len, '*'); // => "123**"

//右寄せにするなら第4引数で指定
echo str_pad($value, $len, '0', STR_PAD_LEFT); // => "00123"
変わったところでは左右の両方を埋めるというオプションもある。
$value = '(^o^)';
$len = 9;

echo str_pad($value, $len, 'w', STR_PAD_BOTH); // => "ww(^o^)ww"


sprintf()の場合
$value = 123;
$len = 5;

//デフォルトは右寄せのスペース埋め
echo sprintf("%{$len}s", $value); // => "  123"

//左寄せにするならマイナスを付ける
echo sprintf("%-{$len}s", $value); // => "123  "

//ゼロ埋めの場合はゼロを付ける
echo sprintf("%0{$len}s", $value); // => "00123"

//十進数ならsでなくdの方がいい?
echo sprintf("%0{$len}d", $value); // => "00123"

//スペースとゼロ以外で埋めたい場合、埋めたい文字の前にシングルクォートを付ける
echo sprintf("%'*{$len}s", $value); // => "**123"
sprintf()はパディング専用ではなく文字列フォーマット用関数なので、他にもオプションがある。詳しくはsprintf()のマニュアル参照。

0 件のコメント:

ブログ アーカイブ

tags