Je voulais juste ajouter: str_pad n'est pas une option avec des nombres négatifs
wtf8_decode
6
Juste pour ajouter ce que wtf8_decode a dit; Les nombres négatifs n'auraient pas de zéros en tête et ce ne sont pas des nombres positifs. c'est-à-dire que 08 serait écrit comme une date, ou quelque chose qui attend un nombre positif à deux chiffres (code de tri du compte bancaire, etc.). Veuillez me corriger si je me trompe, mais pour autant que je sache, il n'y a pas d'exemple réel d'exiger un zéro de tête sur une valeur négative?
guyver4mk
3
Je voulais ajouter que sprintf('%+03d:00 UTC',$i)où $iest -12 à 12, imprimera + ou - selon les besoins, et mettra également des zéros de tête pour les nombres de moins de 2 chiffres. Idéal pour créer un fuseau horaire SELECTen HTML.
Ce serait mieux avec un exemple ou plus d'explications au-delà de simplement lier la page de manuel de sprintf ().
jharrell
13
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 fait référence à 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.
Si les numéros d'entrée ont toujours 7 ou 8 chiffres, vous pouvez également utiliser
$str =($input <10000000)?0. $input : $input;
J'ai effectué quelques tests et je me suis rendu compte que cela doublerait aussi vite que str_pador 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 également être un peu plus rapide que str_padet sprintf.
Btw: Mon test a également dit que sprintfc'est un peu plus rapide que str_pad. J'ai fait tous les tests avec PHP 5.6.
Edit: Bien que la substrversion semble être encore très rapide (PHP 7.2), elle est également cassée au cas où votre entrée pourrait être plus longue que la longueur à laquelle vous souhaitez effectuer le remplissage. Par exemple, vous voulez remplir à 3 chiffres et votre entrée a 4 que substr('0000' . '1234', -3) = '234'ne résultera que dans les 3 derniers chiffres
Merci, j'aime votre variation mais pensez que ce devrait être $ str = (strlen ($ input) <8)? 0. $ input: $ input;
JMX
@JMX En fait, les deux méthodes fonctionnent bien. (À côté de mes disparus, $je viens de
corriger
1
J'ai écrit cette fonction simple pour produire ce format: 01:00:03
Les secondes sont toujours affichées (même si elles sont nulles). Les minutes sont affichées si elles sont supérieures à zéro ou si des heures ou des jours sont nécessaires. Les heures sont affichées si supérieures à zéro ou si des jours sont nécessaires. Les jours sont affichés s'ils sont supérieurs à zéro.
sprintf('%+03d:00 UTC',$i)
où$i
est -12 à 12, imprimera + ou - selon les besoins, et mettra également des zéros de tête pour les nombres de moins de 2 chiffres. Idéal pour créer un fuseau horaireSELECT
en HTML.sprintf
( 3v4l.org/junvv/perf#output ) est un peu plus rapide questr_pad
( 3v4l.org/cliNP/perf#output )É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
la source
Lorsque j'ai besoin de 01 au lieu de 1, les éléments suivants ont fonctionné pour moi:
la source
la source
Bien que je ne sois pas vraiment sûr de ce que vous voulez faire, vous recherchez probablement un sprintf .
Ce serait:
la source
sprintf
est ce dont vous avez besoin.EDIT (en quelque sorte demandé par les votes négatifs ), à partir de la page liée ci-dessus, voici un exemple de "nombres entiers à remplissage nul":
la source
Réponse simple
Je ne sais pas comment interpréter le commentaire en disant "il ne sera jamais plus de 8 chiffres" et s'il fait référence à 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 découper les 8 premiers chiffres
Pour couper les 8 derniers chiffres
la source
Si les numéros d'entrée ont toujours 7 ou 8 chiffres, vous pouvez également utiliser
J'ai effectué quelques tests et je me suis rendu compte que cela doublerait aussi vite que
str_pad
orsprintf
.Si l'entrée peut avoir n'importe quelle longueur, vous pouvez également utiliser
Ce n'est pas aussi rapide que l'autre, mais devrait également être un peu plus rapide que
str_pad
etsprintf
.Btw: Mon test a également dit que
sprintf
c'est un peu plus rapide questr_pad
. J'ai fait tous les tests avec PHP 5.6.Edit: Bien que la
substr
version semble être encore très rapide (PHP 7.2), elle est également cassée au cas où votre entrée pourrait être plus longue que la longueur à laquelle vous souhaitez effectuer le remplissage. Par exemple, vous voulez remplir à 3 chiffres et votre entrée a 4 quesubstr('0000' . '1234', -3) = '234'
ne résultera que dans les 3 derniers chiffresla source
$
je viens deJ'ai écrit cette fonction simple pour produire ce format: 01:00:03
Les secondes sont toujours affichées (même si elles sont nulles). Les minutes sont affichées si elles sont supérieures à zéro ou si des heures ou des jours sont nécessaires. Les heures sont affichées si supérieures à zéro ou si des jours sont nécessaires. Les jours sont affichés s'ils sont supérieurs à zéro.
Exemples:
la source
la source
Cela fonctionne parfaitement:
la source
Vous pouvez toujours abuser du jonglage de type:
Cela ne fonctionnera pas comme prévu si
10 ** pad > INT_MAX
ouvalue >= 10 * pad
.la source
la source