Форматирование числа с ведущими нулями в PHP
Описание проблемы
У меня есть переменная, которая содержит значение <code>1234567</code>
.
Мне нужно, чтобы она содержала ровно 8 цифр, то есть <code>01234567</code>
.
Существует ли функция в PHP, которая может решить эту задачу?
5 ответ(ов)
Когда мне нужно получать 01 вместо 1, я использую следующий код:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
Этот код добавляет нули слева, чтобы обеспечить нужную длину строки. В данном случае он преобразует число 1 в строку "01".
Этот код на PHP использует функцию str_pad
, чтобы дополнить строку "1234567"
до длины 8 символов, добавляя символы '0'
слева. Флаг STR_PAD_LEFT
указывает, что дополнение должно происходить с левой стороны.
В результате выполнения этого кода получится строка "001234567"
.
Вот краткий пример:
echo str_pad("1234567", 8, '0', STR_PAD_LEFT); // Вывод: 001234567
Таким образом, если вам нужно дополнить строку до определенной длины с использованием определенного символа, вы можете использовать str_pad
с нужными параметрами.
Если вам нужно отобразить значение переменной $value
, вы можете использовать следующий код:
Для вывода значения:
printf("%08d", $value);
Для получения отформатированного значения и сохранения его в переменной:
$formatted_value = sprintf("%08d", $value);
Это должно решить вашу задачу.
Простой ответ:
$p = 1234567;
$p = sprintf("%08d", $p);
Комментарий "Это никогда не будет больше 8 цифр" относится к входным данным. Форматирование с помощью sprintf
добавляет ведущие нули, чтобы результат всегда состоял из 8 символов (например, 00012345
). Если переменная $p
меньше 8 цифр, добавятся ведущие нули.
Если вы хотите обрезать строку до первых 8 символов, вы можете использовать:
$p = substr(sprintf('%08d', $p), 0, 8);
Если вам нужно обрезать последние 8 символов, используйте:
$p = substr(sprintf('%08d', $p), -8, 8);
Однако в данном случае, так как выход всегда будет 8 символов, острога длинна в 8 символов не даст вам потерь.
Если входные числа всегда содержат 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)
вернет только последние 3 цифры, то есть 234
.
Отобразить число с двумя знаками после запятой
UTF-8 на всех уровнях!
Сортировка двумерного массива по значению в столбце
Как передать переменные и данные из PHP в JavaScript?
Вставка нового элемента в массив в любом месте в PHP