PHP - генерировать число с ведущими нулями и начиная с 100 - PullRequest
3 голосов
/ 21 ноября 2011

Я хотел бы иметь функцию для генерации чисел, начиная с "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;
}

Пример: новый заказ был размещен, а идентификатор заказа равен "19".Окончательный номер заказа должен быть 000119.

Спасибо!

Ответы [ 4 ]

9 голосов
/ 21 ноября 2011

Почему бы не использовать один 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); 
3 голосов
/ 21 ноября 2011

Просто используйте str_pad:

<?php
    for($i = 100; $i < 115; $i++)
        echo str_pad($i, 6, '0', STR_PAD_LEFT) . '<br>';
?>

http://codepad.viper -7.com / cI9DTO

0 голосов
/ 19 февраля 2015

Я хотел увидеть, что было быстрее:

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

или

str_pad($i, 6, '0', STR_PAD_LEFT)

Разница между этими двумя значениями была незначительной.sprintf был постоянно быстрее, чем str_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

Мой код теста:

Когда запускается тестируемый кодменьше времени, чем сам цикл, время цикла будет существенно влиять на результаты.Поэтому я использую эталонный цикл, чтобы вычесть время цикла из тестовых циклов.

Я использовал циклы по 10 000 итераций.

$saveLoops = 10000;

Контрольный цикл:

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

LOOP 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";

LOOP 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";

Calc Times

$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']);
0 голосов
/ 21 ноября 2011
$arrayVar = Array();
for($i=100;$i<200;$i++){
$arrayVar[$i] = "000" . $i;
}
foreach($arrayVar as $num){
echo $num . "<br>";
}

В основном просто добавляет 0 к началу переменной в массиве, вторая часть выплевывает уникальные числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...