2008-11-27 7 views
92

Je dois convertir des chiffres simples (1 à 9) en (01 à 09). Je peux penser à un moyen mais c'est grand et laid et encombrant. Je suis sûr qu'il doit y avoir un moyen concis. Toutes les suggestionsChiffres du pavé numérique dans la chaîne

+0

Copie possible de [Formatage d'un nombre avec des zéros en tête de PHP] (http://stackoverflow.com/questions/1699958/formatting-a-number-with-leading-zeros-in-php) –

Répondre

173

Tout d'abord, votre description est trompeuse. Double est un type de données en virgule flottante. Vous voulez probablement remplir vos chiffres avec des zéros dans une chaîne. Le code suivant fait que:

$s = sprintf('%02d', $digit); 

Pour plus d'informations, reportez-vous à la documentation de sprintf.

+0

bon travail. cela fonctionne –

+0

'09' et' 08' ne fonctionne pas dans PHP7 –

+0

@HirenBhut Non, cela fonctionne. –

73

Il y a aussi str_pad

<?php 
$input = "Alien"; 
echo str_pad($input, 10);      // produces "Alien  " 
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien" 
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___" 
echo str_pad($input, 6 , "___");    // produces "Alien_" 
?> 
54

Solution en utilisant str_pad:

str_pad($digit,2,'0',STR_PAD_LEFT); 

Benchmark sur php 5,3

Résultat str_pad: 0,286863088608

Res ULT sprintf: 0,234171152115

code:

$start = microtime(true); 
for ($i=0;$i<100000;$i++) { 
    str_pad(9,2,'0',STR_PAD_LEFT); 
    str_pad(15,2,'0',STR_PAD_LEFT); 
    str_pad(100,2,'0',STR_PAD_LEFT); 
} 
$end = microtime(true); 
echo "Result str_pad : ",($end-$start),"\n"; 

$start = microtime(true); 
for ($i=0;$i<100000;$i++) { 
    sprintf("%02d", 9); 
    sprintf("%02d", 15); 
    sprintf("%02d", 100); 
} 
$end = microtime(true); 
echo "Result sprintf : ",($end-$start),"\n"; 
-5
"0$digit" 

.. si vous connaissez déjà le seul chiffre!

Questions connexes