У меня есть переменная, которая содержит значение 1234567
.
Я хотел бы, чтобы он содержал ровно 8 цифр, т.е. 01234567
.
Есть ли для этого функция 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);
Когда мне нужно 01 вместо 1, для меня работало следующее:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
Хотя я не совсем уверен, что вы хотите сделать, вы, вероятно, ищете sprintf.
Это будет:
$value = sprintf( '%08d', 1234567 );
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
.
Btw: Мой тест также сказал, что 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
$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
Вы всегда можете злоупотреблять жонглированием:
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
$sl=1;
while ($sl<13) {
$str = ($sl < 10) ? 0 . $sl : $sl;
$sql="SELECT login_time FROM hcm_attendance_".$str;
$sl++;
}