PHP에서 선행 0으로 숫자 서식 지정
값을 포함하는 변수가 있습니다 1234567
.
정확히 8 자리 숫자를 포함하고 싶습니다 01234567
.
이를위한 PHP 기능이 있습니까?
사용 sprintf
:
sprintf('%08d', 1234567);
또는 다음을 사용할 수도 있습니다 str_pad
.
str_pad($value, 8, '0', STR_PAD_LEFT);
값이 $ value에있는 경우 :
에코하려면 :
printf("%08d", $value);
그것을 얻기 위해:
$formatted_value = sprintf("%08d", $value);
그게 트릭을해야합니다
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
1 대신 01이 필요할 때 다음이 효과적이었습니다.
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
나는 당신이 무엇을 원하는지 잘 모르겠지만 아마도 sprintf를 찾고있을 것입니다 .
이것은 다음과 같습니다.
$value = sprintf( '%08d', 1234567 );
sprintf
당신이 필요로하는 것입니다.
EDIT ( 어떻게 든 downvotes에 의해 요청 됨 ), 위에 링크 된 페이지에서 다음은 샘플 "제로 패딩 된 정수"입니다.
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
간단한 대답
$p = 1234567;
$p = sprintf("%08d",$p);
"8 자리를 넘지 않을 것입니다"라는 주석을 해석하는 방법과 입력 또는 출력을 참조하는지 잘 모르겠습니다. 출력을 참조하는 경우 문자열을 자르기 위해 추가 substr () 호출이 있어야합니다.
처음 8 자리를 자르려면
$p = substr(sprintf('%08d', $p),0,8);
마지막 8 자리를 자르려면
$p = substr(sprintf('%08d', $p),-8,8);
입력 번호가 항상 7 또는 8 자리 인 경우 다음을 사용할 수도 있습니다.
$str = ($input < 10000000) ? 0 . $input : $input;
몇 가지 테스트를 실행 한 결과 str_pad
또는 sprintf
.
입력에 길이가 제한되어 있으면 다음을 사용할 수도 있습니다.
$str = substr('00000000' . $input, -8);
이것은 다른 것만 큼 빠르지는 않지만 str_pad
및 보다 조금 더 빠릅니다 sprintf
.
BTW : 내 테스트도 그렇게 말한다면 sprintf
조금 더 빨리보다 str_pad
. 나는 모든 테스트를 PHP 5.6으로 만들었다.
이 형식을 생성하기 위해 다음과 같은 간단한 함수를 작성했습니다. 01:00:03
Seconds are always shown (even if zero). Minutes are shown if greater than zero or if hours or days are required. Hours are shown if greater than zero or if days are required. Days are shown if greater than zero.
function formatSeconds($secs) {
$result = '';
$seconds = intval($secs) % 60;
$minutes = (intval($secs) / 60) % 60;
$hours = (intval($secs) / 3600) % 24;
$days = intval(intval($secs) / (3600*24));
if ($days > 0) {
$result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':';
}
if(($hours > 0) || ($result!="")) {
$result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
}
if (($minutes > 0) || ($result!="")) {
$result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
}
//seconds aways shown
$result .= str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $result;
} //funct
Examples:
echo formatSeconds(15); //15
echo formatSeconds(100); //01:40
echo formatSeconds(10800); //03:00:00 (mins shown even if zero)
echo formatSeconds(10000000); //115:17:46:40
This works perfectly:
$number = 13246;
echo sprintf( '%08d', $number );
$no_of_digit = 10;
$number = 123;
$length = strlen((string)$number);
for($i = $length;$i<$no_of_digit;$i++)
{
$number = '0'.$number;
}
echo $number; /////// result 0000000123
function duration($time){
$hours = '';
$minutes = '00:';
$seconds = '00';
if($time >= 3600){
//0 - ~ hours
$hours = floor($time / 3600);
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 3600;
}
if($time >= 60){
//0 - 60 minute
$minutes = floor($time / 60);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 60;
}
if($time){
//0 - 60 second
$seconds = str_pad($time, 2, '0', STR_PAD_LEFT);
}
return $hours . $minutes . $seconds;
}
echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20
You can always abuse type juggling:
function zpad(int $value, int $pad): string {
return substr(1, $value + 10 ** $pad);
}
This wont work as expected if either 10 ** pad > INT_MAX
or value >= 10 * pad
.
If you can append zero or anything into string. like
public function saveHoliday($month)
{
return "0{$month}";
}
echo $this->saveHoliday(1); // 01
참고URL : https://stackoverflow.com/questions/1699958/formatting-a-number-with-leading-zeros-in-php
'Development Tip' 카테고리의 다른 글
C # 목록 (0) | 2020.10.03 |
---|---|
대시를 제외한 문자열에서 영숫자가 아닌 모든 문자를 제거하려면 어떻게합니까? (0) | 2020.10.03 |
파일이 더 이상 존재하지 않는 경우 Windows 서비스를 제거하려면 어떻게합니까? (0) | 2020.10.03 |
Git 푸시 오류 : 저장소 데이터베이스에 개체를 추가 할 권한이 없습니다. (0) | 2020.10.03 |
모든 브랜치를 당기고 밀도록 git 설정 (0) | 2020.10.03 |