フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

YYPHP#50「製作途中の漫画について感想をもらいたい、最初どういう風に勉強していったのか、PHPの入門書を読み終えた人が中級者になるために何を読んだら良いか、どうやったら強いエンジニアになれるか?、PHPを使うことで自分のサイトにどんなサービスを追加できるのか、開発環境をどうしているのか?」

文字列を空白で埋める

固定長の文字列を得るために、後ろをスペースで埋めたり数値を右揃えで頭をゼロで埋めたりしたい場面はあると思います。
PHPでは以下の関数を使うのがセオリーですが…

str_pad — 文字列を固定長の他の文字列で埋める

str_pad
$str1 = 'hogehoge';
$str2 = 'piyo';
//10桁で後ろをスペースで埋める
echo str_pad($str1, 10); //'hogehoge  '
echo str_pad($str2, 10); //'piyo      '

sprintf — フォーマットされた文字列を返す

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); //'ピヨ       '

「文字数」カウントなので、全角文字を引数にする場合はどういう結果を得たいかによって少し手を加える必要がありますね。

コメント

記事に戻る

コメントを残す