Các chữ số có phím số không trong chuỗi


126

Tôi cần chuyển các hình đơn (1 đến 9) thành (01 đến 09). Tôi có thể nghĩ ra một cách nhưng nó to và xấu 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

Câu trả lời:


214

Trước hết, mô tả của bạn là sai lệch. Doublelà một kiểu dữ liệu dấu chấm động. Có lẽ bạn muốn đệm các chữ số của mình bằng các số 0 ở đầu trong một chuỗi. Đoạn mã sau thực hiện điều đó:

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

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


@KonradRudolph Nếu tôi có vượt qua như digitgiá trị là số nguyên mà thời gian nhất định lỗi, Nếu vượt qua như chuỗi thời gian đó không phải vấn đề
Hiren Bhut

@HirenBhut Không. Tôi chắc chắn 100% rằng nó hoạt động. Tài liệu nói như vậy. Tôi thậm chí đã thử nghiệm nó chỉ dành cho bạn: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Konrad Rudolph

@KonradRudolph Vui lòng kiểm tra mã này gist.github.com/klmr/…
Hiren Bhut

3
@HirenBhut Chà, điều đó hoàn toàn khác và không liên quan gìsprintf . Kiểm tra định dạng của số nguyên , đặc biệt là phần về chữ số bát phân.
Konrad Rudolph

@KonradRudolph Có, Có giải pháp nào khả thi không?
Hiren Bhut

90

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_"
?>

67

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

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

Điểm chuẩn trên php 5.3

Kết quả str_pad: 0,286863088608

Kết quả sprintf: 0,234171152115

Mã:

$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

Hiệu suất của str_padphụ thuộc nhiều vào độ dài của đệm. Để có tốc độ ổn định hơn, bạn có thể sử dụng str_repeat .

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

Đồng thời sử dụng giá trị chuỗi của số để có hiệu suất tốt hơn.

$number = strval(123);

Đã thử nghiệm trên 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.