PHPで0埋め文字をechoで出力するときはprintfを使って失敗した

PHPで0埋め文字をechoで出すときに、printfを使ってしまい、時間を取られてしまった。
以下のコードで、00003を期待していたが、結果は、000035となってしまった。
マニュアルを読んだら理解した。

echo printf("%05d", 3) . PHP_EOL;
// 結果は、000035になってしまう。

printfは、第一引数のformatに従って、文字列を出力する。戻り値は、出力した文字数。
000035は、printfで00003を出力して、echoが返り値の出力した文字数5を出力しているために発生する。

echoを使って出力するのなら、第一引数のformatに従った文字列が戻り値のsprintfを使うべきだった。

printf("%05d\n", 3) . PHP_EOL;
echo sprintf("%05d", 3) . PHP_EOL;
// 結果は、どちらも00003になる。

PHP5.6.28で確認した。

コメント

タイトルとURLをコピーしました