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
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
Jawaban:
Pertama-tama, deskripsi Anda menyesatkan. Double
adalah 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
.
sprintf
. Periksa format bilangan bulat , khususnya bagian tentang digit oktal.
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_"
?>
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";
Kinerja str_pad
sangat 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)
digit
nilai sebagai integer waktu itu diberikan kesalahan, Jika lulus sebagai string waktu itu tidak masalah