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?
É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
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
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);
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 );
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);
?>
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);
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.
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
$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
Cela fonctionne parfaitement:
$number = 13246;
echo sprintf( '%08d', $number );