Просто хотел добавить: str_pad не вариант с отрицательными числами
wtf8_decode
6
Просто чтобы добавить к тому, что сказал wtf8_decode; Отрицательные числа не будут иметь ведущих нулей, и они не являются положительными числами. т. е. 08 будет записано как дата или что-то, что предполагает положительное двузначное число (код сортировки банковского счета и т. д.). Пожалуйста, поправьте меня, если я ошибаюсь, но, насколько я знаю, в реальной жизни нет случая, чтобы требовать начального нуля для отрицательного значения?
guyver4mk
3
Хотелось добавить, что sprintf('%+03d:00 UTC',$i)там , где от $i-12 до 12, будет печатать + или - по мере необходимости, а также ставит начальные нули для чисел менее 2 цифр. Отлично подходит для создания часового пояса SELECTв HTML.
Было бы лучше с примером или большим количеством объяснений, помимо простой ссылки на страницу руководства для sprintf ().
Джаррелл
13
Простой ответ
$p =1234567;
$p = sprintf("%08d",$p);
Я не уверен, как интерпретировать комментарий «никогда не будет больше 8 цифр» и относится ли он к входу или выходу. Если это относится к выводу, вам понадобится дополнительный вызов substr (), чтобы обрезать строку.
Если входные номера всегда имеют 7 или 8 цифр, вы также можете использовать
$str =($input <10000000)?0. $input : $input;
Я провел несколько тестов и понял, что это будет вдвое быстрее, чем str_padили sprintf.
Если вход может иметь любую длину, то вы также можете использовать
$str = substr('00000000'. $input,-8);
Это не так быстро, как другой, но также должно быть немного быстрее, чем str_padи sprintf.
Кстати: мой тест также сказал, что sprintfэто немного быстрее, чем str_pad. Я сделал все тесты с PHP 5.6.
Изменить: Хотя substrверсия кажется все еще очень быстрой (PHP 7.2), она также не работает, если ваш ввод может быть больше, чем длина, которую вы хотите дополнить. Например, вы хотите заполнить до 3 цифр, и ваш ввод имеет 4, что substr('0000' . '1234', -3) = '234'приведет только к последним 3 цифрам
Спасибо, мне нравится ваш вариант, но вы думаете, что это должно быть $ str = (strlen ($ input) <8)? 0 $ input: $ input;
JMX
@JMX На самом деле оба способа работают нормально. (Рядом с моим пропавшим$ я только что исправил)
AbcAeffchen
1
Я написал эту простую функцию для создания этого формата: 01:00:03
Секунды всегда отображаются (даже если ноль). Минуты показываются, если больше нуля или если требуются часы или дни. Часы показываются, если больше нуля или если требуются дни. Дни показываются, если больше нуля.
sprintf('%+03d:00 UTC',$i)
там , где от$i
-12 до 12, будет печатать + или - по мере необходимости, а также ставит начальные нули для чисел менее 2 цифр. Отлично подходит для создания часового поясаSELECT
в HTML.sprintf
( 3v4l.org/junvv/perf#output ) немного быстрее, чемstr_pad
( 3v4l.org/cliNP/perf#output )Учитывая, что значение находится в $ value:
Чтобы повторить это:
printf("%08d", $value);
Чтобы получить это:
$formatted_value = sprintf("%08d", $value);
Это должно делать свое дело
источник
Когда мне нужно 01 вместо 1, у меня сработало следующее:
источник
источник
Хотя я не совсем уверен, что вы хотите сделать, вы, вероятно, ищете sprintf .
Это было бы:
источник
sprintf
это то, что вам нужно.РЕДАКТИРОВАТЬ ( каким-то образом запрашиваемое понижающими голосами ) со страницы, указанной выше, вот пример "целых чисел с нулевым дополнением":
источник
Простой ответ
Я не уверен, как интерпретировать комментарий «никогда не будет больше 8 цифр» и относится ли он к входу или выходу. Если это относится к выводу, вам понадобится дополнительный вызов substr (), чтобы обрезать строку.
Чтобы обрезать первые 8 цифр
Чтобы обрезать последние 8 цифр
источник
Если входные номера всегда имеют 7 или 8 цифр, вы также можете использовать
Я провел несколько тестов и понял, что это будет вдвое быстрее, чем
str_pad
илиsprintf
.Если вход может иметь любую длину, то вы также можете использовать
Это не так быстро, как другой, но также должно быть немного быстрее, чем
str_pad
иsprintf
.Кстати: мой тест также сказал, что
sprintf
это немного быстрее, чемstr_pad
. Я сделал все тесты с PHP 5.6.Изменить: Хотя
substr
версия кажется все еще очень быстрой (PHP 7.2), она также не работает, если ваш ввод может быть больше, чем длина, которую вы хотите дополнить. Например, вы хотите заполнить до 3 цифр, и ваш ввод имеет 4, чтоsubstr('0000' . '1234', -3) = '234'
приведет только к последним 3 цифрамисточник
$
я только что исправил)Я написал эту простую функцию для создания этого формата: 01:00:03
Секунды всегда отображаются (даже если ноль). Минуты показываются, если больше нуля или если требуются часы или дни. Часы показываются, если больше нуля или если требуются дни. Дни показываются, если больше нуля.
Примеры:
источник
источник
Это прекрасно работает:
источник
Вы всегда можете злоупотреблять жонглированием типов:
Это не будет работать , как и следовало ожидать , если либо
10 ** pad > INT_MAX
илиvalue >= 10 * pad
.источник
источник