문자열의 제로 패드 숫자


126

단일 피규어 (1 ~ 9) ~ (01 ~ 09)를 캐스팅해야합니다. 나는 방법을 생각할 수 있지만 그 크고 추하고 번거 롭다. 간결한 방법이있을 거라고 확신합니다. 모든 제안

답변:


214

우선, 설명이 오해의 소지가 있습니다. Double부동 소수점 데이터 유형입니다. 아마도 문자열에서 선행 0으로 숫자를 채우고 싶을 것입니다. 다음 코드는이를 수행합니다.

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

자세한 내용은의 설명서를 참조하십시오 sprintf.


@KonradRudolph 내가 digit주어진 시간에 정수 로 값을 전달하면 오류가 발생하면 문자열로 전달하면 문제가되지 않습니다.
Hiren Bhut

@HirenBhut 아니요. 100 % 작동한다고 확신합니다. 문서에 그렇게 나와 있습니다. 난 당신을 위해 그것을 테스트 : gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
콘라드 루돌프에게

@KonradRudolph이 코드를 확인하십시오 gist.github.com/klmr/…
Hiren Bhut

3
완전히 다른, 그리고 @HirenBhut 그럼 함께 할 수 없다sprintf . 정수 형식 , 특히 8 진수에 대한 섹션을 확인하세요 .
Konrad Rudolph

@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

결과 스프린트 f : 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.