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.
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