値1234567
を含む変数があります。
正確に8桁の数字、つまり01234567
を含むようにします。
そのためのPHP関数はありますか?
値が$ valueにあると仮定すると、
それをエコーするには:
printf("%08d", $value);
それを得るために:
$formatted_value = sprintf("%08d", $value);
これでうまくいくはずです
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
1の代わりに01が必要なときは、次のものが役に立ちました。
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
はあなたが必要とするものです。
上のリンク先のページから、EDIT( どういうわけかダウン投票で要求された )、ここに「ゼロ詰め整数」のサンプルがあります。
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
簡単な答え
$p = 1234567;
$p = sprintf("%08d",$p);
「8桁以上になることはありません」というコメントの解釈方法がわからないし、入力または出力を参照している場合それが出力を参照している場合は、文字列を切り取るために追加のsubstr()呼び出しが必要になります。
最初の8桁を切り取る
$p = substr(sprintf('%08d', $p),0,8);
最後の8桁を切り取る
$p = substr(sprintf('%08d', $p),-8,8);
入力番号が常に7桁または8桁の場合は、次のものも使用できます。
$str = ($input < 10000000) ? 0 . $input : $input;
私はいくつかのテストを実行し、これがstr_pad
またはsprintf
の2倍の速さになるだろうということを得ました。
入力が任意の長さを持つことができるならば、あなたも使うことができます
$str = substr('00000000' . $input, -8);
これは他のものほど速くはありませんが、str_pad
やsprintf
よりも少し速いはずです。
Btw:私のテストでは、sprintf
はstr_pad
より少し速いとも言われました。私はPHP 5.6ですべてのテストを行いました。
私はこのフォーマットを作り出すためにこの単純な関数を書きました: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
$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
これは完全に機能します:
$number = 13246;
echo sprintf( '%08d', $number );