文字列のパディング
文字列をある桁数にするために、足りない分を任意の文字で埋める方法。
str_pad(値, 文字数, [埋める文字], [左右どちらを埋めるか])
埋める文字を省略すると半角スペースが使用される。
また、どちらを埋めるかは、
STR_PAD_RIGHT:右側を埋める(=左寄せ)
STR_PAD_LEFT :左側を埋める(=右寄せ)
STR_PAD_BOTH :両側を埋める(=中央へ表示)
で指定する。省略すると右側が埋められる。
// 「abc」を「abc 」にする $string = str_pad("abc"', 5) $string = str_pad("abc", 5, " ", STR_PAD_RIGHT) // 「123」を「00123」にする $string = str_pad("123", 5, "0", STR_PAD_LEFT) // 「^-^」を「|^-^|」にする $string = str_pad("^-^", 5, "|", STR_PAD_BOTH)
尚、全角文字で同じことをしたい場合はやや工夫が必要です。
参考:phpの文字列フォーマットに関する質問です。 - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1093580150
せっかくなので関数化してみましょうか。
使い方はstr_padと同じで、全角を入れても半角を入れても動きます。
private function mb_str_pad($input, $pad_length, $pad_string = " ", $pad_type = STR_PAD_RIGHT, $encoding = "") { // エンコード指定がない場合は取得 if ($encoding == "") { $encoding = mb_internal_encoding(); } if ($pad_type == STR_PAD_LEFT) { // 左側を埋める $pad_length = $pad_length - mb_strlen($input, $encoding); $string = mb_substr(str_repeat($pad_string, $pad_length), 0, $pad_length, $encoding) . $input; } elseif ($pad_type == STR_PAD_BOTH) { // 両側を埋める $pad_length_l = floor(($pad_length - mb_strlen($input, $encoding)) / 2); $pad_length_r = ceil(($pad_length - mb_strlen($input, $encoding)) / 2); $string = mb_substr(str_repeat($pad_string, $pad_length), 0, $pad_length_l, $encoding) . $input . mb_substr(str_repeat($pad_string, $pad_length), 0, $pad_length_r, $encoding); } else { // 右側を埋める $pad_length = $pad_length - mb_strlen($input, $encoding); $string = $input . mb_substr(str_repeat($pad_string, $pad_length), 0, $pad_length, $encoding); } return $string; }