7

Форматирование числа с ведущими нулями в PHP

2

Описание проблемы

У меня есть переменная, которая содержит значение <code>1234567</code>.

Мне нужно, чтобы она содержала ровно 8 цифр, то есть <code>01234567</code>.

Существует ли функция в PHP, которая может решить эту задачу?

5 ответ(ов)

1

Когда мне нужно получать 01 вместо 1, я использую следующий код:

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);

Этот код добавляет нули слева, чтобы обеспечить нужную длину строки. В данном случае он преобразует число 1 в строку "01".

0

Этот код на PHP использует функцию str_pad, чтобы дополнить строку "1234567" до длины 8 символов, добавляя символы '0' слева. Флаг STR_PAD_LEFT указывает, что дополнение должно происходить с левой стороны.

В результате выполнения этого кода получится строка "001234567".

Вот краткий пример:

echo str_pad("1234567", 8, '0', STR_PAD_LEFT); // Вывод: 001234567

Таким образом, если вам нужно дополнить строку до определенной длины с использованием определенного символа, вы можете использовать str_pad с нужными параметрами.

0

Если вам нужно отобразить значение переменной $value, вы можете использовать следующий код:

  • Для вывода значения:

    printf("%08d", $value);
    
  • Для получения отформатированного значения и сохранения его в переменной:

    $formatted_value = sprintf("%08d", $value);
    

Это должно решить вашу задачу.

0

Простой ответ:

$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 символов не даст вам потерь.

0

Если входные числа всегда содержат 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.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь