Hanya ingin menambahkan: str_pad bukan opsi dengan angka negatif
wtf8_decode
6
Hanya menambahkan di atas apa yang dikatakan wtf8_decode; Angka negatif tidak akan memiliki nol di depan, dan itu bukan angka positif. yaitu 08 akan ditulis seperti tanggal, atau sesuatu yang mengharapkan angka dua digit positif (kode sortir Rekening Bank, dll). Tolong perbaiki saya jika saya salah, tetapi sejauh yang saya tahu, tidak ada contoh kehidupan nyata yang membutuhkan nol di depan pada nilai negatif?
guyver4mk
3
Ingin menambahkan bahwa di sprintf('%+03d:00 UTC',$i)mana $i-12 hingga 12, akan mencetak + atau - sesuai kebutuhan, dan juga akan menempatkan angka nol di depan untuk angka kurang dari 2 digit. Sangat bagus untuk membuat zona waktu SELECTdalam HTML.
Akan lebih baik dengan contoh atau lebih banyak penjelasan di luar hanya menghubungkan halaman manual untuk sprintf ().
jharrell
13
Jawaban sederhana
$p =1234567;
$p = sprintf("%08d",$p);
Saya tidak yakin bagaimana menafsirkan komentar yang mengatakan "Itu tidak akan pernah lebih dari 8 digit" dan jika itu mengacu pada input atau output. Jika mengacu pada output, Anda harus memiliki panggilan substr () tambahan untuk klip string.
Jika nomor input selalu 7 atau 8 digit, Anda juga dapat menggunakan
$str =($input <10000000)?0. $input : $input;
Saya menjalankan beberapa tes dan mendapatkan bahwa ini akan menjadi dua kali lipat secepat str_padatau sprintf.
Jika input bisa memiliki panjang, maka Anda juga bisa menggunakan
$str = substr('00000000'. $input,-8);
Ini tidak secepat yang lain, tetapi juga harus sedikit lebih cepat daripada str_paddan sprintf.
Btw: Tes saya juga mengatakan itu sprintfsedikit lebih cepat daripada str_pad. Saya membuat semua tes dengan PHP 5.6.
Sunting: Walaupun substrversinya tampaknya masih sangat cepat (PHP 7.2), versi ini juga rusak jika input Anda bisa lebih panjang dari panjang yang ingin Anda pad. Misalnya Anda ingin substr('0000' . '1234', -3) = '234'menambahkan 3 digit dan input Anda memiliki 4 daripada hanya akan menghasilkan 3 digit terakhir
Terima kasih, saya suka variasi Anda, tetapi saya pikir itu harus $ str = (strlen ($ input) <8)? 0. $ input: $ input;
JMX
@JMX Sebenarnya, kedua cara bekerja dengan baik. (Di samping kehilangan saya, $saya baru saja memperbaiki)
AbcAeffchen
1
Saya menulis fungsi sederhana ini untuk menghasilkan format ini: 01:00:03
Detik selalu ditampilkan (bahkan jika nol). Menit ditampilkan jika lebih besar dari nol atau jika diperlukan jam atau hari. Jam ditampilkan jika lebih besar dari nol atau jika hari diperlukan. Hari ditampilkan jika lebih besar dari nol.
sprintf('%+03d:00 UTC',$i)
mana$i
-12 hingga 12, akan mencetak + atau - sesuai kebutuhan, dan juga akan menempatkan angka nol di depan untuk angka kurang dari 2 digit. Sangat bagus untuk membuat zona waktuSELECT
dalam HTML.sprintf
( 3v4l.org/junvv/perf#output ) sedikit lebih cepat daripadastr_pad
( 3v4l.org/cliNP/perf#output )Mengingat bahwa nilainya dalam $ value:
Untuk menggemakannya:
printf("%08d", $value);
Untuk mendapatkan:
$formatted_value = sprintf("%08d", $value);
Itu harus melakukan trik
sumber
Ketika saya membutuhkan 01 bukannya 1, yang berikut ini berfungsi untuk saya:
sumber
sumber
Meskipun saya tidak begitu yakin apa yang ingin Anda lakukan, Anda mungkin mencari sprintf .
Ini akan menjadi:
sumber
sprintf
adalah apa yang kamu butuhkan.EDIT ( entah bagaimana diminta oleh downvotes ), dari halaman yang ditautkan di atas, inilah contoh "bilangan bulat tanpa bantalan":
sumber
Jawaban sederhana
Saya tidak yakin bagaimana menafsirkan komentar yang mengatakan "Itu tidak akan pernah lebih dari 8 digit" dan jika itu mengacu pada input atau output. Jika mengacu pada output, Anda harus memiliki panggilan substr () tambahan untuk klip string.
Untuk memotong 8 digit pertama
Untuk memotong 8 digit terakhir
sumber
Jika nomor input selalu 7 atau 8 digit, Anda juga dapat menggunakan
Saya menjalankan beberapa tes dan mendapatkan bahwa ini akan menjadi dua kali lipat secepat
str_pad
atausprintf
.Jika input bisa memiliki panjang, maka Anda juga bisa menggunakan
Ini tidak secepat yang lain, tetapi juga harus sedikit lebih cepat daripada
str_pad
dansprintf
.Btw: Tes saya juga mengatakan itu
sprintf
sedikit lebih cepat daripadastr_pad
. Saya membuat semua tes dengan PHP 5.6.Sunting: Walaupun
substr
versinya tampaknya masih sangat cepat (PHP 7.2), versi ini juga rusak jika input Anda bisa lebih panjang dari panjang yang ingin Anda pad. Misalnya Anda inginsubstr('0000' . '1234', -3) = '234'
menambahkan 3 digit dan input Anda memiliki 4 daripada hanya akan menghasilkan 3 digit terakhirsumber
$
saya baru saja memperbaiki)Saya menulis fungsi sederhana ini untuk menghasilkan format ini: 01:00:03
Detik selalu ditampilkan (bahkan jika nol). Menit ditampilkan jika lebih besar dari nol atau jika diperlukan jam atau hari. Jam ditampilkan jika lebih besar dari nol atau jika hari diperlukan. Hari ditampilkan jika lebih besar dari nol.
Contoh:
sumber
sumber
Ini bekerja dengan sempurna:
sumber
Anda selalu dapat menyalahgunakan jenis juggling:
Ini tidak akan berfungsi seperti yang diharapkan jika salah satu
10 ** pad > INT_MAX
atauvalue >= 10 * pad
.sumber
sumber