Число с ведущими нулями

Возникает необходимость выводить числа с ведущими нулями (например, дата вида 01.02.2010). Небольшие кусочки кода (так называемые сниппеты) позволяют сделать это без лишних манипуляций.

Вариант 1 — функция


<?php
function numberFormat($digit, $width) {
	while(strlen($digit) < $width) {
      $digit = '0' . $digit;
	}
    return $digit;
}
?>

Использовать достаточно просто:


<?php
$str = 1;
echo numberFormat($str, 4);
// Выведет "0001"
?>

Вариант 2 — str_pad():


<?php
$str = '1';
echo str_pad($str, 4, '0', STR_PAD_LEFT);
// Выводит "0001"
?>

Вариант 3 — sprintf():


<?php
$str = '1';
echo sprintf("%04d", $str);
// Выводит "0001"
?>

Вариант 4 — str_repeat():


<?php
$str = '1';
echo str_repeat( '0', $width - strlen( $str ) ) . $str;
// Выводит "0001"
?>

Вариант 5 — цикл с возвращением

Этот вариант был подсмотрен на Хабре:


<?php
$str = 1;
function numberFormat( $digit, $width ) {
	for( ; strlen( $digit | 0 ) < $width--; $digit = "0$a" ) {}
	return $digit;
}
echo numberFormat( $str, 4 );
// Выведет "0001"
?></code>

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

  • Добавил еще один способ с str_repeat()

  • Дмитрий

    Первый вариант — один большой косяк. Уж если на то пошло, то работать будет

    function numberFormat($digit, $width)
    {
    if(strlen($digit) == $width)
    {
    return $digit;
    }
    else
    {
    while(strlen($digit) < $width)
    {
    $digit = '0' . $digit;
    }
    return $digit;
    }
    }

    Хотя зачем это нужно, когда есть str_pad() и sprintf()

    • Ваш код делает тоже самое, но длиннее, с лишним условием и 2 раза определяется длина строки.

      Никто не мешает вам использовать str_pad() и sprintf()

      • Дмитрий

        И если уж на то пошло, то самым лишним и затратным здесь будет цикл.

        А про str_pad() и sprintf() я уже высказался.

  • Спасибо за тесты )))