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

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

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

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

Использовать sprintf :

 sprintf('%08d', 1234567); 

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

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

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

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

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

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

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

Это должно делать свое дело

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

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

Это было бы:

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

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

EDIT ( как-то запрошенными downvotes ), со страницы, указанной выше, вот образец «нулевые полные числа»:

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

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

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

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

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

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

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

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

Кстати, мой тест также сказал, что sprintf немного быстрее, чем str_pad . Я провел все тесты с PHP 5.6.

Я написал эту простую функцию для создания этого формата: 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 ); $number = 13246; echo sprintf( '%08d', $number );