Форматирование числа с ведущими нулями в PHP

У меня есть переменная, которая содержит значение 1234567.

Я хотел бы, чтобы он содержал ровно 8 цифр, т.е. 01234567.

Есть ли для этого функция PHP?

Ответ 1

Используйте sprintf:

sprintf('%08d', 1234567);

В качестве альтернативы вы также можете использовать str_pad:

str_pad($value, 8, '0', STR_PAD_LEFT);

Ответ 2

Учитывая, что значение находится в $value:

  • Чтобы повторить это:

    printf("%08d", $value);

  • Чтобы получить его:

    $formatted_value = sprintf("%08d", $value);

Это должно сделать трюк

Ответ 3

echo str_pad("1234567", 8, '0', STR_PAD_LEFT);

Ответ 4

Когда мне нужно 01 вместо 1, для меня работало следующее:

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);

Ответ 5

Хотя я не совсем уверен, что вы хотите сделать, вы, вероятно, ищете sprintf.

Это будет:

$value = sprintf( '%08d', 1234567 );

Ответ 6

sprintf - это то, что вам нужно.

РЕДАКТИРОВАТЬ (как-то запрошенными вниз), со страницы, указанной выше, здесь образец "нулевые полные числа":

<?php
    $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>

Ответ 7

Простой ответ

$p = 1234567;
$p = sprintf("%08d",$p);

Я не уверен, как интерпретировать комментарий, говорящий "Он никогда не будет более 8 цифр", и если он ссылается на ввод или вывод. Если это относится к выходу, вам придется иметь дополнительный вызов substr() для обрезания строки.

Чтобы скопировать первые 8 цифр

$p = substr(sprintf('%08d', $p),0,8);

Чтобы скопировать последние 8 цифр

$p = substr(sprintf('%08d', $p),-8,8);

Ответ 8

Если номера ввода всегда содержат 7 или 8 цифр, вы также можете использовать

$str = ($input < 10000000) ? 0 . $input : $input;

Я провел несколько тестов и понял, что это будет вдвое быстрее, чем str_pad или sprintf.
Если вход может иметь любую длину, вы также можете использовать

$str = substr('00000000' . $input, -8);

Это не так быстро, как у другого, но также должно быть немного быстрее, чем str_pad и sprintf.

Btw: Мой тест также сказал, что sprintf немного быстрее, чем str_pad. Я сделал все тесты с PHP 5.6.

Ответ 9

Я написал эту простую функцию для создания этого формата: 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 

Ответ 10

$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

Ответ 11

Это прекрасно работает:

$number = 13246;
echo sprintf( '%08d', $number );

Ответ 12

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

Ответ 13

Вы всегда можете злоупотреблять жонглированием:

function zpad(int $value, int $pad): string {
    return substr(1, $value + 10 ** $pad);
}

Это не будет работать, как ожидалось, если 10 ** pad > INT_MAX или value >= 10 * pad.

Ответ 14

Если вы можете добавить ноль или что-нибудь в строку. лайк

public function saveHoliday($month)
    {
       return "0{$month}";
    }

  echo $this->saveHoliday(1);   // 01

Ответ 15

$sl=1;    
while ($sl<13) {
       $str = ($sl < 10) ? 0 . $sl : $sl;
       $sql="SELECT login_time FROM hcm_attendance_".$str;
       $sl++;
}