web-dev-qa-db-fra.com

Mise en forme d'un nombre avec des zéros non significatifs dans PHP

J'ai une variable qui contient la valeur 1234567.

Je voudrais qu’il contienne exactement 8 chiffres, c’est-à-dire 01234567.

Existe-t-il une fonction PHP pour cela?

536
Andromeda

Utilisez sprintf :

sprintf('%08d', 1234567);

Sinon, vous pouvez également utiliser str_pad :

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

Étant donné que la valeur est en $ valeur:

  • Pour y faire écho:

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

  • Pour l'obtenir:

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

Cela devrait faire l'affaire

76
Kaze no Koe
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
25
joan16v

Lorsque j'ai besoin de 01 au lieu de 1, les éléments suivants ont fonctionné pour moi:

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

Bien que je ne sois pas vraiment sûr de ce que vous voulez faire, vous recherchez probablement sprintf .

Ce serait:

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

sprintf est ce dont vous avez besoin.

EDIT ( demandée d'une manière ou d'une autre par les votes négatifs ), à partir de la page liée ci-dessus, voici un exemple "d'entiers remplis de zéros":

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

Réponse simple

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

Je ne suis pas sûr de savoir comment interpréter le commentaire disant "Ce ne sera jamais plus de 8 chiffres" et si cela fait référence à l'entrée ou à la sortie. Si cela fait référence à la sortie, vous devez avoir un appel supplémentaire substr () pour couper la chaîne.

Couper les 8 premiers chiffres

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

Couper les 8 derniers chiffres

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

Si les numéros entrés ont toujours 7 ou 8 chiffres, vous pouvez également utiliser

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

J'ai fait des tests et je me suis dit que cela pourrait doubler aussi vite que str_pad ou sprintf.
Si l’entrée peut avoir une longueur quelconque, vous pouvez aussi utiliser

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

Ce n'est pas aussi rapide que l'autre, mais devrait également être un peu plus rapide que str_pad et sprintf.

Btw: Mon test a également dit que sprintf est un peu plus rapide que str_pad. J'ai fait tous les tests avec PHP 5.6.

6
AbcAeffchen

J'ai écrit cette fonction simple pour produire ce format: 01:00:03

Les secondes sont toujours affichées (même si zéro). Les minutes sont affichées si plus grand que zéro ou si des heures ou des jours sont requis. Les heures sont affichées si supérieur à zéro ou si des jours sont nécessaires. Les jours sont affichés si plus grand que zéro.

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

Exemples:

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 
1
Enigma Plus
$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
0
Rutvik kakadiya

Cela fonctionne parfaitement:

$number = 13246;
echo sprintf( '%08d', $number );
0
CZ workman