Відповіді:
Використання 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
це те, що вам потрібно.
EDIT ( якось запитується в нижній частині ) зі сторінки, що пов’язана вище, ось зразок "цілих цілих чисел":
<?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.
Редагувати: Хоча 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