Цифры с нуля в строке


126

Мне нужно отлить отдельные фигуры (от 1 до 9) до (от 01 до 09). Я могу придумать способ, но он большой, уродливый и громоздкий. Я уверен, что должен быть какой-то лаконичный способ. Какие-либо предложения

Ответы:


214

Во-первых, ваше описание вводит в заблуждение. Doubleэто тип данных с плавающей запятой. Предположительно, вы хотите дополнить свои цифры ведущими нулями в строке. Следующий код делает это:

$s = sprintf('%02d', $digit);

Для получения дополнительной информации обратитесь к документации sprintf.


@KonradRudolph Если я передал digitзначение как целое число в тот раз с ошибкой, Если передал как строку в этот раз, не проблема
Хирен Бут,

@HirenBhut Нет. Я на 100% уверен, что это работает. В документации так сказано. Я даже протестировал это специально для вас: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Конрад Рудольф

@KonradRudolph, пожалуйста, проверьте этот код gist.github.com/klmr/…
Hiren Bhut

3
@HirenBhut Ну, это совсем другое, и не при чемsprintf . Проверьте формат целых чисел , в частности раздел о восьмеричных цифрах.
Конрад Рудольф

@KonradRudolph Да, может какое решение?
Hiren Bhut

90

Также есть str_pad

<?php
$input = "Alien";
echo str_pad($input, 10);                      // produces "Alien     "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // produces "__Alien___"
echo str_pad($input, 6 , "___");               // produces "Alien_"
?>

67

Решение с использованием str_pad :

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

Тест на php 5.3

Результат str_pad: 0.286863088608

Результат sprintf: 0.234171152115

Код:

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    str_pad(9,2,'0',STR_PAD_LEFT);
    str_pad(15,2,'0',STR_PAD_LEFT);
    str_pad(100,2,'0',STR_PAD_LEFT);
}
$end = microtime(true);
echo "Result str_pad : ",($end-$start),"\n";

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    sprintf("%02d", 9);
    sprintf("%02d", 15);
    sprintf("%02d", 100);
}
$end = microtime(true);
echo "Result sprintf : ",($end-$start),"\n";

0

Производительность str_padсильно зависит от длины набивки. Для более стабильной скорости вы можете использовать str_repeat .

$padded_string = str_repeat("0", $length-strlen($number)) . $number;

Также используйте строковое значение числа для повышения производительности.

$number = strval(123);

Протестировано на PHP 7.4

str_repeat: 0.086055040359497   (number: 123, padding: 1)
str_repeat: 0.085798978805542   (number: 123, padding: 3)
str_repeat: 0.085641145706177   (number: 123, padding: 10)
str_repeat: 0.091305017471313   (number: 123, padding: 100)

str_pad:    0.086184978485107   (number: 123, padding: 1)
str_pad:    0.096981048583984   (number: 123, padding: 3)
str_pad:    0.14874792098999    (number: 123, padding: 10)
str_pad:    0.85979700088501    (number: 123, padding: 100)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.