2011-04-14 18 views
148

PHP - ¿Existe un método rápido sobre la marcha para probar una cadena de un solo carácter, y anteponer un cero inicial?PHP anteponer el cero al principio antes del número de un solo dígito, sobre la marcha

Ejemplo:

$year = 11; 
$month = 4; 

$stamp = $year.add_single_zero_if_needed($month); // Imaginary function 

echo $stamp; // 1104 
+1

Después de las pruebas, resulta sprintf() era un poco mejor: tiene un formato de lenguaje común y no utiliza una constante de clase, entre otras cosas. – Ben

+0

Posible duplicado de [Formatear un número con ceros a la izquierda en PHP] (https://stackoverflow.com/questions/1699958/formatting-a-number-with-leading-zeros-in-php) – Meloman

Respuesta

336

Puede utilizar sprintf: http://php.net/manual/en/function.sprintf.php

<?php 
$num = 4; 
$num_padded = sprintf("%02d", $num); 
echo $num_padded; // returns 04 
?> 

Solo agregará el cero si es menor que el número requerido de caracteres.

Editar: Como ha señalado @FelipeAls:

Cuando se trabaja con números, se debe utilizar %d (en lugar de %s), especialmente cuando existe la posibilidad de que los números negativos. Si solo usa números positivos, cualquier opción funciona bien.

Por ejemplo:

sprintf("%04s", 10); 0010 devuelve
sprintf("%04s", -10); rendimientos 0-10

Donde como:

sprintf("%04d", 10); retornos 0010
sprintf("%04d", -10); devuelve -010

+8

Tenga cuidado con los números negativos (obviamente no un problema con las fechas aquí! :)). '% 03s' puede generar' 0-5' donde '% 03d' daría salida' -05' – FelipeAls

+0

pedazo de pastel ... tan bueno. – Vignesh

+0

esto no funciona con números negativos –

142

Se puede utilizar para añadir str_pad de 0

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

string str_pad (string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]])

+2

¡Oro puro aquí mismo! – Jordan

+4

@zzlalani - en realidad si observa detenidamente el ejemplo en la respuesta de Kirk Beard, se guarda en una variable :) – Ben

+1

tiene razón ... – zzlalani

15

La herramienta universal para cuerdas formateo, sprintf:

$stamp = sprintf('%s%02s', $year, $month); 

http://php.net/manual/en/function.sprintf.php

+2

str_pad es más legible. Me gusta mantener las cosas simples. sprintf es una gran función, la uso mucho para transalciones, cuando debe haber una variable en el medio de la cadena, pero para tal cosa, iré con str_pad(); mientras trabajo solo con enteros positivos no requieren ninguna cosa elegante. –

4

Parece que tomar un montón de líneas para hacer que funcione. Utilizo esta breve funcionalidad IF y da el mismo resultado que OP quiere.

$month = 8; 
echo ($month < 10 ? '0'.$month : $month); // output: 08 

Y se necesita solamente 1 línea para mostrar la salida correcta

+3

¿Qué hay de más en las soluciones anteriores con una sola llamada str_pad() o sprint()? –

+0

Acepto, no hace ninguna más corta. :) –

Cuestiones relacionadas