1234567
ฉันมีตัวแปรที่มีค่าที่
ฉันต้องการให้มันประกอบด้วย 8 หลัก01234567
อย่างแน่นอน
มีฟังก์ชั่น PHP สำหรับสิ่งนั้นหรือไม่?
1234567
ฉันมีตัวแปรที่มีค่าที่
ฉันต้องการให้มันประกอบด้วย 8 หลัก01234567
อย่างแน่นอน
มีฟังก์ชั่น PHP สำหรับสิ่งนั้นหรือไม่?
คำตอบ:
การใช้sprintf
:
sprintf('%08d', 1234567);
หรือคุณสามารถใช้str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
ที่$i
-12 ถึง 12 จะพิมพ์ + หรือ - ตามต้องการและจะใส่ศูนย์นำหน้าสำหรับตัวเลขที่น้อยกว่า 2 หลัก เหมาะสำหรับสร้างเขตเวลาSELECT
ใน HTML
sprintf
( 3v4l.org/junvv/perf#output ) จะเร็วกว่าเล็กน้อยstr_pad
( 3v4l.org/cliNP/perf#output )
ระบุว่าค่าเป็น $ value:
เพื่อสะท้อน:
printf("%08d", $value);
ที่จะได้รับมัน:
$formatted_value = sprintf("%08d", $value);
นั่นควรทำเคล็ดลับ
เมื่อฉันต้องการ 01 แทน 1 สิ่งต่อไปนี้ใช้ได้สำหรับฉัน:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
คำตอบง่ายๆ
$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
แก้ไข: Altough substr
รุ่นดูเหมือนว่าจะยังคงเป็นอย่างรวดเร็ว (PHP 7.2) ก็ยังเสียในกรณีการป้อนข้อมูลของคุณอาจจะนานกว่าระยะเวลาที่คุณต้องการเพื่อแผ่น เช่นคุณต้องการที่จะ pad ถึง 3 หลักและการป้อนข้อมูลของคุณมี 4 กว่าsubstr('0000' . '1234', -3) = '234'
จะส่งผลให้ 3 หลักสุดท้าย
$
ฉันฉันเพิ่งแก้ไข)
ฉันเขียนฟังก์ชันง่าย ๆ เพื่อสร้างรูปแบบนี้: 01:00:03
วินาทีจะปรากฏขึ้นเสมอ (แม้ว่าจะเป็นศูนย์) นาทีจะปรากฏขึ้นหากต้องการมากกว่าศูนย์หรือถ้าต้องการชั่วโมงหรือวัน ชั่วโมงจะปรากฏขึ้นหากต้องการมากกว่าศูนย์หรือหากต้องการวัน วันจะแสดงหากมากกว่าศูนย์
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
ตัวอย่าง:
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
$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
มันทำงานได้อย่างสมบูรณ์แบบ:
$number = 13246;
echo sprintf( '%08d', $number );
คุณสามารถใช้การเล่นกลประเภทการละเมิดได้เสมอ:
function zpad(int $value, int $pad): string {
return substr(1, $value + 10 ** $pad);
}
นี้ทำงานตามปกติตามที่คาดว่าอย่างใดอย่างหนึ่งหรือ10 ** pad > INT_MAX
value >= 10 * pad
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