Formatting a number with leading zeros in PHP

PhpNumbersFormat

Php Problem Overview


I have a variable which contains the value 1234567.

I would like it to contain exactly 8 digits, i.e. 01234567.

Is there a PHP function for that?

Php Solutions


Solution 1 - Php

Use sprintf :

sprintf('%08d', 1234567);

Alternatively you can also use str_pad:

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

Solution 2 - Php

Given that the value is in $value:

  • To echo it:

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

  • To get it:

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

That should do the trick

Solution 3 - Php

When I need 01 instead of 1, the following worked for me:

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

Solution 4 - Php

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

Solution 5 - Php

sprintf is what you need.

EDIT (somehow requested by the downvotes), from the page linked above, here's a sample "zero-padded integers":

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

Solution 6 - Php

Though I'm not really sure what you want to do you are probably looking for sprintf.

This would be:

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

Solution 7 - Php

Simple answer

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

I'm not sure how to interpret the comment saying "It will never be more than 8 digits" and if it's referring to the input or the output. If it refers to the output you would have to have an additional substr() call to clip the string.

To clip the first 8 digits

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

To clip the last 8 digits

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

Solution 8 - Php

If the input numbers have always 7 or 8 digits, you can also use

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

I ran some tests and get that this would be up to double as fast as str_pad or sprintf.
If the input can have any length, then you could also use

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

This is not as fast as the other one, but should also be a little bit faster than str_pad and sprintf.

Btw: My test also said that sprintf is a little faster than str_pad. I made all tests with PHP 5.6.

Edit: Altough the substr version seems to be still very fast (PHP 7.2), it also is broken in case your input can be longer than the length you want to pad to. E.g. you want to pad to 3 digits and your input has 4 than substr('0000' . '1234', -3) = '234' will only result in the last 3 digits

Solution 9 - Php

$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

Solution 10 - Php

I wrote this simple function to produce this format: 01:00:03

Seconds are always shown (even if zero). Minutes are shown if greater than zero or if hours or days are required. Hours are shown if greater than zero or if days are required. Days are shown if greater than zero.

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

Examples:

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 

Solution 11 - Php

You can always abuse type juggling:

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

This wont work as expected if either 10 ** pad > INT_MAX or value >= 10 * pad.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAndromedaView Question on Stackoverflow
Solution 1 - Phpreko_tView Answer on Stackoverflow
Solution 2 - PhpKaze no KoeView Answer on Stackoverflow
Solution 3 - PhpMd. Shafiqur RahmanView Answer on Stackoverflow
Solution 4 - Phpjoan16vView Answer on Stackoverflow
Solution 5 - Phpuser180100View Answer on Stackoverflow
Solution 6 - PhpHuppieView Answer on Stackoverflow
Solution 7 - PhpPeter LindqvistView Answer on Stackoverflow
Solution 8 - PhpAbcAeffchenView Answer on Stackoverflow
Solution 9 - PhpRutvik kakadiyaView Answer on Stackoverflow
Solution 10 - PhpEnigma PlusView Answer on Stackoverflow
Solution 11 - PhpjgmjgmView Answer on Stackoverflow