アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

文字列のパディング

文字列をある桁数にするために、足りない分を任意の文字で埋める方法。

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;
}