2008-11-27 41 views
92

Tôi cần phải truyền các hình đơn (1 đến 9) đến (01 đến 09). Tôi có thể nghĩ ra một cách nhưng nó to và xấu xí và cồng kềnh. Tôi chắc chắn phải có một số cách ngắn gọn. Bất kỳ Đề xuất nàoChữ số 0-số trong chuỗi

+0

Bản sao có thể có của [Định dạng số bằng số 0 đứng đầu trong PHP] (http://stackoverflow.com/questions/1699958/formatting-a-number-with-leading-zeros-in-php) –

Trả lời

173

Trước hết, mô tả của bạn gây hiểu nhầm. Double là loại dữ liệu dấu chấm động. Bạn có lẽ muốn để pad chữ số của bạn với số không đầu trong một chuỗi. Mã sau đây thực hiện:

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

Để biết thêm thông tin, hãy tham khảo tài liệu của sprintf.

+0

công việc tốt. nó hoạt động –

+0

'09' và' 08' không hoạt động trong PHP7 –

+0

@HirenBhut Không, nó hoạt động. –

73

Ngoài ra còn có 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_" 
?> 
54

Giải pháp sử dụng str_pad:

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

Benchmark trên php 5,3

quả str_pad: 0,286863088608

Res ult sprintf: 0,234171152115

Code:

$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"; 
-5
"0$digit" 

.. nếu bạn đã biết chữ số duy nhất của nó!

Các vấn đề liên quan