はじめに
マルチバイト文字列を指定の長さで揃えたい
sprintf
sprintf('%-10s', 'abc'); // "abc "
sprintf('%-10s', 'あいうえお') // "あいうえお"
sprintfではマルチバイト文字のときに上手く対応できない
str_pad
str_pad('abc', 10, ' ',STR_PAD_RIGHT) // "abc "
str_pad('あいう', 10, ' ',STR_PAD_RIGHT) // "あいう "
バイト数換算で計算されるので、マルチバイト文字の場合、指定が上手く対応できない
以下のような関数を作ってマルチバイト文字列の長さを揃える
/**
* 指定の文字列の長さまで全角で埋める
* @return string $input 埋めた後の文字列
*/
public function mbStrPad($input, $pad_length) {
while(mb_strlen($input) < $pad_length) {
$input .= ' ';
}
return $input;
}
mbStrPad('あいうえお', 10); // "あいうえお "
mb_strlen(mbStrPad('あいうえお', 10)); // 10
上記のような関数を作ってあげてマルチバイト文字列の長さを揃えた