PHP добавляет начальный ноль перед однозначным числом, на лету

PHP - есть ли быстрый метод "на лету" для проверки односимвольной строки с последующим добавлением начального нуля?

Пример:

$year = 11;
$month = 4;

$stamp = $year.add_single_zero_if_needed($month);  // Imaginary function

echo $stamp; // 1104

person Ben    schedule 14.04.2011    source источник
comment
После тестирования оказалось, что sprintf () был немного лучше: он имеет общий языковой формат и, помимо прочего, не использует константу класса.   -  person Ben    schedule 15.01.2013


Ответы (3)


Вы можете использовать sprintf: http://php.net/manual/en/function.sprintf.php

<?php
$num = 4;
$num_padded = sprintf("%02d", $num);
echo $num_padded; // returns 04
?>

Он добавит ноль только в том случае, если он меньше необходимого количества символов.

Изменить: как указано @FelipeAls:

При работе с числами вы должны использовать %d (а не %s), особенно когда есть вероятность отрицательных чисел. Если вы используете только положительные числа, любой вариант подойдет.

Например:

sprintf("%04s", 10); возвращает 0010
sprintf("%04s", -10); возвращает 0-10

В то время как:

sprintf("%04d", 10); возвращает 0010
sprintf("%04d", -10); возвращает -010

person Kirk Beard    schedule 14.04.2011
comment
Остерегайтесь отрицательных чисел (здесь с датами проблем нет! :)). %03s может выводить 0-5, где %03d выводит -05 - person FelipeAls; 11.07.2014
comment
это не работает с отрицательными числами - person Rafik Bari; 17.02.2015
comment
@RafikBari Я обновил свой ответ, включив в него информацию, упомянутую @FelipeAls. Отрицательные числа обрабатываются нормально, если вы используете %02d. - person Kirk Beard; 17.02.2015
comment
Ваше изменение неверно, sprintf (% 04s, 10); возвращает 0010, а не 1000. - person Marek Lisý; 27.10.2015
comment
Также sprintf (% 04d, -10); возвращает -010. Протестировано на PHP 5.5.18 - person Marek Lisý; 27.10.2015

Вы можете использовать str_pad для добавления нулей

str_pad($month, 2, '0', STR_PAD_LEFT); 

string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )

person Gaurav    schedule 14.04.2011
comment
Чистое золото прямо здесь! - person Jordan; 28.07.2013
comment
@zzlalani - на самом деле, если вы внимательно посмотрите на пример в ответе Кирка Бирда, он сохраняется в переменной :) - person Ben; 14.09.2013
comment
это не работает с отрицательными числами - person Rafik Bari; 17.02.2015

Универсальный инструмент для форматирования строк, sprintf:

$stamp = sprintf('%s%02s', $year, $month);

http://php.net/manual/en/function.sprintf.php

person deceze♦    schedule 14.04.2011
comment
str_pad более читабелен. Мне нравится все упрощать. sprintf - отличная функция, я часто использую ее для трансляций, когда в середине строки должна быть переменная, но для таких вещей я использую str_pad (); пока я работаю только с положительными целыми числами. они не требуют никаких изысков. - person Lukas Liesis; 05.04.2015
comment
Используйте sprintf: sprintf ('% 08d', 1234567); В качестве альтернативы вы также можете использовать str_pad: str_pad ($ value, 8, '0', STR_PAD_LEFT); - person Kamlesh; 04.09.2019
comment
как насчет подписанной цифры? str_replace (00, 0, sprintf ('% 03d', $ num)) - person Sahib Khan; 05.06.2020