Câu trả lời:
Sử dụng sprintf
:
sprintf('%08d', 1234567);
Ngoài ra, bạn cũng có thể sử dụng str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
đó $i
là -12 đến 12, sẽ in + hoặc - khi cần và cũng sẽ đặt các số 0 đứng đầu cho các số nhỏ hơn 2 chữ số. Tuyệt vời để tạo một múi giờ SELECT
trong HTML.
sprintf
( 3v4l.org/junvv/perf#output ) nhanh hơn một chút so với str_pad
( 3v4l.org/cliNP/perf#output )
Cho rằng giá trị tính bằng $ value:
Để lặp lại nó:
printf("%08d", $value);
Để có được nó:
$formatted_value = sprintf("%08d", $value);
Điều đó sẽ làm các trick
Khi tôi cần 01 thay vì 1, những điều sau đây có hiệu quả với tôi:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
là những gì bạn cần.
EDIT ( bằng cách nào đó được yêu cầu bởi các downvote ), từ trang được liên kết ở trên, đây là một mẫu "số nguyên không đệm" mẫu:
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Câu trả lời đơn giản
$p = 1234567;
$p = sprintf("%08d",$p);
Tôi không chắc làm thế nào để diễn giải lời bình luận rằng "Nó sẽ không bao giờ quá 8 chữ số" và nếu nó đề cập đến đầu vào hoặc đầu ra. Nếu nó đề cập đến đầu ra, bạn sẽ phải có một lệnh gọi () bổ sung để cắt chuỗi.
Để cắt 8 chữ số đầu tiên
$p = substr(sprintf('%08d', $p),0,8);
Để cắt 8 chữ số cuối
$p = substr(sprintf('%08d', $p),-8,8);
Nếu các số đầu vào luôn có 7 hoặc 8 chữ số, bạn cũng có thể sử dụng
$str = ($input < 10000000) ? 0 . $input : $input;
Tôi đã chạy một số thử nghiệm và nhận được rằng nó sẽ tăng nhanh gấp đôi str_pad
hoặc sprintf
.
Nếu đầu vào có thể có độ dài bất kỳ, thì bạn cũng có thể sử dụng
$str = substr('00000000' . $input, -8);
Cái này không nhanh như cái kia, nhưng cũng nên nhanh hơn một chút so với str_pad
và sprintf
.
Btw: Bài kiểm tra của tôi cũng nói rằng sprintf
nhanh hơn một chút str_pad
. Tôi đã thực hiện tất cả các thử nghiệm với PHP 5.6.
Chỉnh sửa: Mặc dù substr
phiên bản dường như vẫn còn rất nhanh (PHP 7.2), nó cũng bị hỏng trong trường hợp đầu vào của bạn có thể dài hơn độ dài bạn muốn đệm. Ví dụ: bạn muốn đệm đến 3 chữ số và đầu vào của bạn có 4 chữ số substr('0000' . '1234', -3) = '234'
sẽ chỉ dẫn đến 3 chữ số cuối
$
tôi, tôi vừa sửa)
Tôi đã viết hàm đơn giản này để tạo định dạng này: 01:00:03
Giây luôn được hiển thị (ngay cả khi không). Biên bản được hiển thị nếu lớn hơn 0 hoặc nếu cần nhiều giờ hoặc ngày. Giờ được hiển thị nếu lớn hơn 0 hoặc nếu cần ngày. Ngày được hiển thị nếu lớn hơn không.
function formatSeconds($secs) {
$result = '';
$seconds = intval($secs) % 60;
$minutes = (intval($secs) / 60) % 60;
$hours = (intval($secs) / 3600) % 24;
$days = intval(intval($secs) / (3600*24));
if ($days > 0) {
$result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':';
}
if(($hours > 0) || ($result!="")) {
$result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
}
if (($minutes > 0) || ($result!="")) {
$result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
}
//seconds aways shown
$result .= str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $result;
} //funct
Ví dụ:
echo formatSeconds(15); //15
echo formatSeconds(100); //01:40
echo formatSeconds(10800); //03:00:00 (mins shown even if zero)
echo formatSeconds(10000000); //115:17:46:40
$no_of_digit = 10;
$number = 123;
$length = strlen((string)$number);
for($i = $length;$i<$no_of_digit;$i++)
{
$number = '0'.$number;
}
echo $number; /////// result 0000000123
Điều này hoạt động hoàn hảo:
$number = 13246;
echo sprintf( '%08d', $number );
function duration($time){
$hours = '';
$minutes = '00:';
$seconds = '00';
if($time >= 3600){
//0 - ~ hours
$hours = floor($time / 3600);
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 3600;
}
if($time >= 60){
//0 - 60 minute
$minutes = floor($time / 60);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 60;
}
if($time){
//0 - 60 second
$seconds = str_pad($time, 2, '0', STR_PAD_LEFT);
}
return $hours . $minutes . $seconds;
}
echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20