web-dev-qa-db-ja.com

先頭にゼロを付けて数値をフォーマットする PHP

1234567を含む変数があります。

正確に8桁の数字、つまり01234567を含むようにします。

そのためのPHP関数はありますか?

530
Andromeda

sprintf :を使用してください。

sprintf('%08d', 1234567);

あるいは、 str_pad を使用することもできます。

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

値が$ valueにあると仮定すると、

  • それをエコーするには:

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

  • それを得るために:

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

これでうまくいくはずです

76
Kaze no Koe
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
24
joan16v

1の代わりに01が必要なときは、次のものが役に立ちました。

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

私はあなたが何をしたいのか本当によくわかりませんが、おそらく sprintf を探しています。

これは:

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

sprintf はあなたが必要とするものです。

上のリンク先のページから、EDIT( どういうわけかダウン投票で要求された )、ここに「ゼロ詰め整数」のサンプルがあります。

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

簡単な答え

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

「8桁以上になることはありません」というコメントの解釈方法がわからないし、入力または出力を参照している場合それが出力を参照している場合は、文字列を切り取るために追加のsubstr()呼び出しが必要になります。

最初の8桁を切り取る

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

最後の8桁を切り取る

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

入力番号が常に7桁または8桁の場合は、次のものも使用できます。

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

私はいくつかのテストを実行し、これがstr_padまたはsprintfの2倍の速さになるだろうということを得ました。
入力が任意の長さを持つことができるならば、あなたも使うことができます

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

これは他のものほど速くはありませんが、str_padsprintfよりも少し速いはずです。

Btw:私のテストでは、sprintfstr_padより少し速いとも言われました。私はPHP 5.6ですべてのテストを行いました。

6
AbcAeffchen

私はこのフォーマットを作り出すためにこの単純な関数を書きました:01:00:03

秒は常に表示されます(ゼロの場合でも)。ゼロより大きい場合、または数時間または数日が必要な場合は、分が表示されます。時間がゼロより大きい場合、または日数が必要な場合は時間が表示されます。ゼロより大きい場合は日数が表示されます。

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

例:

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 
1
Enigma Plus
$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
0
Rutvik kakadiya

これは完全に機能します:

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