文字列を空白で埋める
固定長の文字列を得るために、後ろをスペースで埋めたり数値を右揃えで頭をゼロで埋めたりしたい場面はあると思います。
PHPでは以下の関数を使うのがセオリーですが…
str_pad
$str1 = 'hogehoge';
$str2 = 'piyo';
//10桁で後ろをスペースで埋める
echo str_pad($str1, 10); //'hogehoge '
echo str_pad($str2, 10); //'piyo '
sprintf
$str1 = 'hogehoge';
$str2 = 'piyo';
//10桁で後ろをスペースで埋める
echo sprintf("%-10s", $str1); //'hogehoge '
echo sprintf("%-10s", $str2); //'piyo '
マルチバイト文字の場合
全角はもちろん、半角カナもマルチバイトなので(ちょっとハマりました…)上記の記述だと意図した結果が得られません。
マルチバイト
$str1 = 'ホゲホゲ';
$str2 = 'ピヨ';
//10桁で後ろをスペースで埋められない・・・
echo str_pad($str1, 10); //'ホゲホゲ'
echo str_pad($str2, 10); //'ピヨ '
echo sprintf("%-10s", $str1); //'ホゲホゲ'
echo sprintf("%-10s", $str2); //'ピヨ '
対応するmb_
シリーズの関数もないようで、どうしようかと思っていたらマニュアルのコメントに素晴らしい解決策がありました。
function mb_str_pad ($input, $pad_length, $pad_string=" ", $pad_style=STR_PAD_RIGHT, $encoding="UTF-8") {
$mb_pad_length = strlen($input) - mb_strlen($input, $encoding) + $pad_length;
return str_pad($input, $mb_pad_length, $pad_string, $pad_style);
}
マルチバイト改
$str1 = 'ホゲホゲ';
$str2 = 'ピヨ';
//10桁で後ろをスペースで埋められた
echo mb_str_pad($str1, 10); //'ホゲホゲ '
echo mb_str_pad($str2, 10); //'ピヨ '
「文字数」カウントなので、全角文字を引数にする場合はどういう結果を得たいかによって少し手を加える必要がありますね。