文字列のゼロパッド数字


126

単数(1〜9)〜(01〜09)をキャストする必要があります。私は方法を考えることができますが、その大きくて醜くて扱いにくいです。きっと簡潔な方法があるに違いない。助言がありますか

回答:


214

まず第一に、あなたの説明は誤解を招くものです。Double浮動小数点データ型です。おそらく、文字列の先頭にゼロを埋め込む必要があります。次のコードはそれを行います:

$s = sprintf('%02d', $digit);

詳細については、のドキュメントを参照してくださいsprintf


@KonradRudolph digitエラーが発生したときに整数として値を渡す場合、そのときに文字列として渡す場合は問題ありません
Hiren Bhut

@HirenBhutいいえ。私はそれが機能することを100%確信しています。ドキュメントはそう言っています。私もあなたのためだけにテストしました:gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Konrad Rudolph

@KonradRudolphこのコードを確認してくださいgist.github.com/klmr/…– Hiren
Bhut

3
@HirenBhutまあそれは完全に異なり、とは何の関係もありませんsprintf整数形式、特に8進数についてのセクションを確認してください。
Konrad Rudolph、

@KonradRudolphはい、可能な解決策はありますか?
Hiren Bhut 2018

90

str_padもあります

<?php
$input = "Alien";
echo str_pad($input, 10);                      // produces "Alien     "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // produces "__Alien___"
echo str_pad($input, 6 , "___");               // produces "Alien_"
?>

67

str_padを使用したソリューション:

str_pad($digit,2,'0',STR_PAD_LEFT);

PHP 5.3のベンチマーク

結果str_pad:0.286863088608

結果sprintf:0.234171152115

コード:

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    str_pad(9,2,'0',STR_PAD_LEFT);
    str_pad(15,2,'0',STR_PAD_LEFT);
    str_pad(100,2,'0',STR_PAD_LEFT);
}
$end = microtime(true);
echo "Result str_pad : ",($end-$start),"\n";

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    sprintf("%02d", 9);
    sprintf("%02d", 15);
    sprintf("%02d", 100);
}
$end = microtime(true);
echo "Result sprintf : ",($end-$start),"\n";

0

のパフォーマンスはstr_pad、パディングの長さに大きく依存します。より一貫した速度を得るには、str_repeatを使用できます。

$padded_string = str_repeat("0", $length-strlen($number)) . $number;

パフォーマンスを向上させるには、数値の文字列値も使用します。

$number = strval(123);

PHP 7.4でテスト済み

str_repeat: 0.086055040359497   (number: 123, padding: 1)
str_repeat: 0.085798978805542   (number: 123, padding: 3)
str_repeat: 0.085641145706177   (number: 123, padding: 10)
str_repeat: 0.091305017471313   (number: 123, padding: 100)

str_pad:    0.086184978485107   (number: 123, padding: 1)
str_pad:    0.096981048583984   (number: 123, padding: 3)
str_pad:    0.14874792098999    (number: 123, padding: 10)
str_pad:    0.85979700088501    (number: 123, padding: 100)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.