Digit nol-pad dalam string

126

Saya perlu memasukkan angka tunggal (1 hingga 9) hingga (01 hingga 09). Saya bisa memikirkan cara tapi itu besar dan jelek dan tidak praktis. Saya yakin pasti ada cara yang ringkas. Setiap Saran

scunliffe.dll
sumber

Jawaban:

214

Pertama-tama, deskripsi Anda menyesatkan. Doubleadalah tipe data floating point. Anda mungkin ingin menambah angka Anda dengan nol di depan dalam sebuah string. Kode berikut melakukannya:

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

Untuk informasi lebih lanjut, lihat dokumentasi sprintf.

Konrad Rudolph
sumber
@KonradRudolph Jika saya telah lulus sebagai digitnilai sebagai integer waktu itu diberikan kesalahan, Jika lulus sebagai string waktu itu tidak masalah
Hiren Bhut
@HirenBhut Tidak. Saya 100% yakin itu berhasil. Dokumentasinya mengatakan demikian. Saya bahkan mengujinya hanya untuk Anda: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Konrad Rudolph
@KonradRudol Harap periksa kode ini gist.github.com/klmr/…
Hiren Bhut
3
@HirenBhut Yah itu benar-benar berbeda, dan tidak ada hubungannya dengansprintf . Periksa format bilangan bulat , khususnya bagian tentang digit oktal.
Konrad Rudolph
@KonradRolol Ya, Apakah ada solusi yang mungkin?
Hiren Bhut
90

Ada juga 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_"
?>
LeppyR64
sumber
67

Solusi menggunakan str_pad :

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

Tolok ukur pada php 5.3

Hasil str_pad: 0.286863088608

Hasil sprintf: 0.234171152115

Kode:

$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";
Alex
sumber
0

Kinerja str_padsangat tergantung pada panjang bantalan. Untuk kecepatan yang lebih konsisten, Anda dapat menggunakan str_repeat .

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

Gunakan juga nilai string dari angka tersebut untuk performa yang lebih baik.

$number = strval(123);

Diuji pada 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)
Cray
sumber