[英]Formatting a number with leading zeros in PHP
我有一個包含值1234567
的變量。
我希望它精確地包含8位數字,即01234567
。
是否有PHP函數呢?
鑒於該值在$ value中:
回顯它:
printf("%08d", $value);
為拿到它,為實現它:
$formatted_value = sprintf("%08d", $value);
這應該夠了吧
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
當我需要01而不是1時,以下內容對我有用:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
是您所需要的。
在上面鏈接的頁面中,編輯(按某種方式由downvotes請求 ),這里有一個示例“零填充整數”:
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
簡單的答案
$p = 1234567;
$p = sprintf("%08d",$p);
我不確定如何解釋“永遠不會超過8位”的注釋,以及它是指輸入還是輸出。 如果它引用輸出,則必須有一個附加的substr()調用來裁剪字符串。
截斷前8位數字
$p = substr(sprintf('%08d', $p),0,8);
截斷最后8位數字
$p = substr(sprintf('%08d', $p),-8,8);
如果輸入數字始終為7或8位數字,則也可以使用
$str = ($input < 10000000) ? 0 . $input : $input;
我進行了一些測試,發現它的速度是str_pad
或sprintf
兩倍。
如果輸入可以有任何長度,那么您也可以使用
$str = substr('00000000' . $input, -8);
這並不比另一個快,但也應該比str_pad
和sprintf
快一點。
順便說一句:我的測試還說sprintf
比str_pad
快一點。 我使用PHP 5.6進行了所有測試。
編輯:盡管substr
版本似乎仍然非常快(PHP 7.2),但如果您的輸入可能比您要填充的長度更長,它也會被破壞。 例如,您想填充到3位數字,並且您的輸入具有4個比substr('0000' . '1234', -3) = '234'
只會導致最后3位數字
我寫了這個簡單的函數來產生這種格式:01:00:03
始終顯示秒(即使為零)。 如果大於零或需要小時或天,則顯示分鍾。 如果大於零或需要天數,則顯示小時數。 如果大於零,則顯示天數。
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
例子:
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
這完美地工作:
$number = 13246;
echo sprintf( '%08d', $number );
$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
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
您總是可以濫用類型的雜耍:
function zpad(int $value, int $pad): string {
return substr(1, $value + 10 ** $pad);
}
如果10 ** pad > INT_MAX
或value >= 10 * pad
這將無法正常工作。
如果可以將零或任何其他內容附加到字符串中。 喜歡
public function saveHoliday($month)
{
return "0{$month}";
}
echo $this->saveHoliday(1); // 01
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.