str_pad rellenar poner numero money_format izquierda formato digitos con completar ceros cadena php numbers format

poner - rellenar cadena con ceros a la izquierda php



Formato de un nĂºmero con ceros iniciales en PHP (11)

Aunque no estoy realmente seguro de lo que quieres hacer, probablemente estés buscando sprintf .

Esto sería:

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

Tengo una variable que contiene el valor 1234567 .

Me gustaría que contenga exactamente 8 dígitos, es decir, 01234567 .

¿Hay una función de PHP para eso?


Cuando necesito 01 en lugar de 1, lo siguiente funcionó para mí:

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


Dado que el valor está en $ valor:

  • Para repetirlo:

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

  • Para conseguirlo:

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

Eso debería hacer el truco


Escribí esta función simple para producir este formato: 01:00:03

Los segundos siempre se muestran (incluso si son cero). Los minutos se muestran si son mayores que cero o si se requieren horas o días. Las horas se muestran si son mayores que cero o si se requieren días. Los días se muestran si es mayor que cero.

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

Ejemplos:

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


Esto funciona perfectamente:

$number = 13246; echo sprintf( ''%08d'', $number );


Respuesta simple

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

No estoy seguro de cómo interpretar el comentario que dice "Nunca habrá más de 8 dígitos" y si se refiere a la entrada o la salida. Si se refiere a la salida, tendría que tener una llamada substr () adicional para recortar la cadena.

Para recortar los primeros 8 dígitos.

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

Para recortar los últimos 8 dígitos

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


Si los números de entrada tienen siempre 7 u 8 dígitos, también puede usar

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

Realicé algunas pruebas y obtuve que esto sería el doble de rápido que str_pad o sprintf .
Si la entrada puede tener cualquier longitud, también podría usar

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

Esto no es tan rápido como el otro, pero también debería ser un poco más rápido que str_pad y sprintf .

Por cierto: mi prueba también dijo que el sprintf es un poco más rápido que el str_pad . Hice todas las pruebas con PHP 5.6.


Utilice sprintf :

sprintf(''%08d'', 1234567);

Alternativamente también puedes usar str_pad :

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


sprintf es lo que necesitas.

EDITAR (de alguna manera solicitado por los votos negativos ), desde la página enlazada arriba, aquí hay una muestra de "enteros con cero":

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


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


function duration($time){ $hours = ''''; $minutes = ''00:''; $seconds = ''00''; if($time >= 3600){ //0 - ~ hours $hours = floor($time / 3600); $hours = str_pad($hours, 2, ''0'', STR_PAD_LEFT) . '':''; $time = $time % 3600; } if($time >= 60){ //0 - 60 minute $minutes = floor($time / 60); $minutes = str_pad($minutes, 2, ''0'', STR_PAD_LEFT) . '':''; $time = $time % 60; } if($time){ //0 - 60 second $seconds = str_pad($time, 2, ''0'', STR_PAD_LEFT); } return $hours . $minutes . $seconds; } echo duration(59); // 00:59 echo duration(590); // 09:50 echo duration(5900); // 01:38:20