PHP-生成带前导零且从100开始的数字

PHP-生成带前导零且从100开始的数字,php,numbers,Php,Numbers,我想有一个函数来生成从“000100”开始的数字 现在我有了下面的函数,它允许我生成带前导零的数字 我如何修改它以满足我的需要 function lz( $aNumber, $intPart, $floatPart=NULL, $dec_point=NULL, $thousands_sep=NULL) { $formattedNumber = $aNumber; if (!is_null($floatPart)) { $formatted

我想有一个函数来生成从“000100”开始的数字

现在我有了下面的函数,它允许我生成带前导零的数字

我如何修改它以满足我的需要

function lz( $aNumber, $intPart, $floatPart=NULL, $dec_point=NULL, $thousands_sep=NULL) 
{     
    $formattedNumber = $aNumber;
    if (!is_null($floatPart)) 
    {  
        $formattedNumber = number_format($formattedNumber, $floatPart, $dec_point, $thousands_sep);
    }

    $formattedNumber = str_repeat("0",($intPart + -1 - floor(log10($formattedNumber)))).$formattedNumber;
    return $formattedNumber;
}
示例:已下了新订单,订单id为“19”。最终订单号必须为000119

谢谢

只需使用:



为什么不使用单个
printf
作为:

printf("%06d",$number); 

使用的格式说明符是:

% - Marks the beginning of the format specifier
0 - Ensures zero filling if number being printed has fewer digits
6 - Number of digits reserved
d - We are printing an integer
编辑:

从您的编辑看来,您希望在格式化输入之前向其添加100。如果是这样,您可以:

printf("%06d",$number+100); 
$arrayVar=Array();

对于($i=100;$i我想看看哪个更快:

sprintf("%06d",$loops);

str_pad($i, 6, '0', STR_PAD_LEFT)
两者之间的差异不显著。
sprintf
始终比
stru-pad
快,但通常只有大约150皮秒。

Ref: Loops: 10,000    Time: 0.00033807754516602
Time Loop 1: Loops: 10,000 Time: 0.0026688575744629  Time per loop: 0.000000267
Time Loop 2: Loops: 10,000 Time: 0.0040788650512695  Time per loop: 0.000000408

Difference per loop: 0.000 000 141

Ratio Loop2/Loop1: 1.5283187421833
Ratio Loop1/Loop2: 0.65431377133505
我的基准代码: 当被基准测试的代码运行的时间少于循环本身时,循环时间将显著影响结果。因此,我使用参考循环从测试循环中减去循环时间。

我使用了10000次迭代的循环。

$saveLoops = 10000;
参考循环:

$loops = $saveLoops;
$t = microtime(true);
while ($loops > 0) {
  $loops--;
}
$refTime = microtime(true) - $t;
echo "Ref: Loops: $saveLoops Time: $refTime\n";
循环1

$loops = $saveLoops;
$t = microtime(true);
while ($loops > 0) {
  $loops--;
  $n = sprintf("%06d",$loops); 

}

$t = microtime(true) - $t - $refTime;
$time['End1'] =  $t;
$t1 = $t/$saveLoops;
echo "Time Loop 1: Loops: " . number_format($saveLoops) . " Time: $t  Time per loop: " . number_format($t1,9) . "\n";
循环2

$loops = $saveLoops;
$t = microtime(true);
while ($loops > 0) {
  $loops--;
  $n = str_pad($loops, 6, '0', STR_PAD_LEFT);
}
$t = microtime(true) - $t - $refTime;
$time['End2'] =  $t;
$t2 = $t/$saveLoops;
echo "Time Loop 2: Loops: " . number_format($saveLoops) . " Time: $t  Time per loop: " . number_format($t2,9) . "\n";
计算次数

$dif = abs($t2 - $t1);
$diff = number_format($dif,9);

$diff = substr($diff,0,5) . ' ' . substr($diff,5,3). ' ' . substr($diff,8,3);

echo "\nDifference per loop: $diff\n";
echo "\nRatio Loop2/Loop1: " . ($time['End2'] / $time['End1']);
echo "\nRatio Loop1/Loop2: " . ($time['End1'] / $time['End2']);

对于从1000开始的数字,将输出7个字符或更多。OP要求一个6个字符的字符串。@codaddict这是客户想要的。他希望订单的编号从000100开始。
$loops = $saveLoops;
$t = microtime(true);
while ($loops > 0) {
  $loops--;
  $n = str_pad($loops, 6, '0', STR_PAD_LEFT);
}
$t = microtime(true) - $t - $refTime;
$time['End2'] =  $t;
$t2 = $t/$saveLoops;
echo "Time Loop 2: Loops: " . number_format($saveLoops) . " Time: $t  Time per loop: " . number_format($t2,9) . "\n";
$dif = abs($t2 - $t1);
$diff = number_format($dif,9);

$diff = substr($diff,0,5) . ' ' . substr($diff,5,3). ' ' . substr($diff,8,3);

echo "\nDifference per loop: $diff\n";
echo "\nRatio Loop2/Loop1: " . ($time['End2'] / $time['End1']);
echo "\nRatio Loop1/Loop2: " . ($time['End1'] / $time['End2']);