PHP-生成带前导零且从100开始的数字
我想有一个函数来生成从“000100”开始的数字 现在我有了下面的函数,它允许我生成带前导零的数字 我如何修改它以满足我的需要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
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']);