Question Formatage d'un nombre avec des zéros en tête de PHP


J'ai une variable qui contient la valeur 1234567.

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

Y a-t-il une fonction PHP pour ça?


468
2017-11-09 09:25


origine


Réponses:


Utilisation sprintf :

sprintf('%08d', 1234567);

Vous pouvez également utiliser str_pad:

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

944
2017-11-09 09:29



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

  • Pour en faire écho:

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

  • Pour l'obtenir:

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

Cela devrait faire l'affaire


70
2017-11-09 09:28



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

18
2017-10-16 08:33



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

Ce serait:

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

17
2017-11-09 09:33



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

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

16
2018-04-23 08:55



sprintf est ce dont vous avez besoin.

MODIFIER (en quelque sorte demandé par les downvotes), à partir de la page liée ci-dessus, voici un exemple de "nombres entiers zéro":

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

14
2017-11-09 09:27



Réponse simple

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

Je ne sais pas comment interpréter le commentaire en disant "Il ne sera jamais plus de 8 chiffres" et s'il se réfère à l'entrée ou à la sortie. S'il fait référence à la sortie, vous devrez avoir un appel substr () supplémentaire pour couper la chaîne.

Pour couper les 8 premiers chiffres

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

Pour couper les 8 derniers chiffres

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

13
2017-11-09 09:30



Si les chiffres saisis ont toujours 7 ou 8 chiffres, vous pouvez également utiliser

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

J'ai fait quelques tests et je me suis rendu compte que cela doublerait aussi vite que str_pad ou sprintf.
Si l'entrée peut avoir n'importe quelle longueur, vous pouvez également utiliser

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

Ce n'est pas aussi rapide que l'autre, mais devrait aussi ê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.


5
2018-06-06 22:48



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 elles sont supérieures à zéro ou si des heures ou des jours sont requis. Les heures sont affichées si elles sont supérieures à zéro ou si des jours sont requis. Les jours sont affichés si supérieur à 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 

2
2017-08-22 10:51



Cela fonctionne bien: $number = 13246; echo sprintf( '%08d', $number );


0
2017-09-20 18:34