Нульові цифри в рядку


126

Мені потрібно навести поодинокі фігури (від 1 до 9) до (01 до 09). Я можу придумати спосіб, але його великий, потворний і громіздкий. Я впевнений, що має бути якийсь стислий спосіб. Будь-які пропозиції

Відповіді:


214

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

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

Для отримання додаткової інформації зверніться до документації sprintf.


@KonradRudolph Якщо я передаю як digitціле значення як ціле число, що дається помилка, якщо передавати як рядок, цей час не проблема
Hiren Bhut

@HirenBhut Ні. Я на 100% впевнений, що це працює. Документація говорить так. Я навіть перевірив це лише для вас: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Konrad Rudolph

@KonradRudolph Перевірте цей код gist.github.com/klmr/…
Hiren Bhut

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

@KonradRudolph Так, чи можливе рішення?
Хірен Бхут

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

Спринт-результат: 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.