Ответы:
Используйте sprintf
:
sprintf('%08d', 1234567);
В качестве альтернативы вы также можете использовать str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
там , где от $i
-12 до 12, будет печатать + или - по мере необходимости, а также ставит начальные нули для чисел менее 2 цифр. Отлично подходит для создания часового пояса SELECT
в HTML.
sprintf
( 3v4l.org/junvv/perf#output ) немного быстрее, чем str_pad
( 3v4l.org/cliNP/perf#output )
Учитывая, что значение находится в $ value:
Чтобы повторить это:
printf("%08d", $value);
Чтобы получить это:
$formatted_value = sprintf("%08d", $value);
Это должно делать свое дело
Когда мне нужно 01 вместо 1, у меня сработало следующее:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
это то, что вам нужно.
РЕДАКТИРОВАТЬ ( каким-то образом запрашиваемое понижающими голосами ) со страницы, указанной выше, вот пример "целых чисел с нулевым дополнением":
<?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
$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
Это прекрасно работает:
$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