PHP में अग्रणी शून्य के साथ एक संख्या का प्रारूपण


600

मेरे पास एक चर है जिसमें मूल्य शामिल है 1234567

मैं चाहूंगा कि इसमें 8 अंक हों, यानी 01234567

क्या इसके लिए कोई PHP फ़ंक्शन है?

जवाबों:


1212

उपयोग करें sprintf:

sprintf('%08d', 1234567);

वैकल्पिक रूप से आप भी उपयोग कर सकते हैं str_pad:

str_pad($value, 8, '0', STR_PAD_LEFT);

54
बस जोड़ना चाहता था: str_pad नकारात्मक संख्या के साथ एक विकल्प नहीं है
wtf8_decode

6
बस wtf8_decode ने जो कहा उसके ऊपर जोड़ना है; नकारात्मक संख्याओं में अग्रणी शून्य नहीं होंगे, और वे सकारात्मक संख्या नहीं हैं। यानी 08 को एक तारीख के रूप में लिखा जाएगा, या ऐसा कुछ जो एक सकारात्मक दोहरे अंक की संख्या (बैंक खाता प्रकार कोड आदि) की अपेक्षा करता है। कृपया मुझे सही करें अगर मैं गलत हूं, लेकिन जहां तक ​​मुझे पता है, नकारात्मक मूल्य पर अग्रणी शून्य की आवश्यकता का कोई वास्तविक जीवन उदाहरण नहीं है?
guyver4mk

3
जोड़ना चाहता था कि sprintf('%+03d:00 UTC',$i)कहां $i-12 से 12 है, आवश्यकतानुसार प्रिंट + या - करेगा और 2 अंकों से कम संख्या के लिए अग्रणी शून्य भी डालेगा। SELECTHTML में टाइमजोन बनाने के लिए बढ़िया है ।
Volomike

2
वर्तमान संस्करण (7.1) और कम के लिए sprintf( 3v4l.org/junvv/perf#output ) की तुलना में एक छोटा सा तेजी से होता है str_pad( 3v4l.org/cliNP/perf#output )
Vladyslav Startsev

जब एक ऋणात्मक संख्या के लिए अग्रणी शून्य की आवश्यकता हो सकती है ... तीन अंकों वाला एक लिफ्ट-ऑफ काउंटर? T-010, T-009, T-008 आदि
TRT 1968

83

यह देखते हुए कि मूल्य $ मूल्य में है:

  • इसे प्रतिध्वनित करने के लिए:

    printf("%08d", $value);

  • इसे पाने के लिए:

    $formatted_value = sprintf("%08d", $value);

यह ट्रिक काम आना चाहिए


32

जब मुझे 1 के बजाय 01 की आवश्यकता होती है, तो निम्नलिखित ने मेरे लिए काम किया:

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);


19

हालांकि मुझे वास्तव में यकीन नहीं है कि आप क्या करना चाहते हैं, आप शायद स्प्रिंट की तलाश में हैं ।

यह होगा:

$value = sprintf( '%08d', 1234567 );

16

sprintf आपको क्या चाहिए

EDIT ( किसी तरह डाउनवोट्स द्वारा अनुरोध किया गया है ), ऊपर दिए गए पृष्ठ से, यहां एक नमूना "शून्य-गद्देदार पूर्णांक" है:

<?php
    $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>

3
स्प्रिंटफ () के लिए केवल मैन पेज को जोड़ने से परे एक उदाहरण या अधिक स्पष्टीकरण के साथ बेहतर होगा।
झारेल

13

सरल उत्तर

$p = 1234567;
$p = sprintf("%08d",$p);

मुझे यकीन नहीं है कि टिप्पणी की व्याख्या कैसे करें "यह 8 अंकों से अधिक कभी नहीं होगा" और अगर यह इनपुट या आउटपुट की बात कर रहा है। यदि यह आउटपुट को संदर्भित करता है तो आपको स्ट्रिंग को क्लिप करने के लिए एक अतिरिक्त पदार्थ () कॉल करना होगा।

पहले 8 अंकों को क्लिप करने के लिए

$p = substr(sprintf('%08d', $p),0,8);

अंतिम 8 अंक क्लिप करने के लिए

$p = substr(sprintf('%08d', $p),-8,8);

7

यदि इनपुट नंबर में हमेशा 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 के साथ सभी परीक्षण किए।

संपादित करें: कम से कम substrसंस्करण अभी भी बहुत तेज़ लगता है (PHP 7.2), यह उस स्थिति में भी टूट जाता है जब आपका इनपुट उस लंबाई से अधिक हो सकता है जिसे आप पैड करना चाहते हैं। उदाहरण के लिए, आप 3 अंकों को पैड करना चाहते हैं और आपके इनपुट में 4 की तुलना substr('0000' . '1234', -3) = '234'में केवल अंतिम 3 अंक होंगे


धन्यवाद, मुझे आपकी भिन्नता पसंद है लेकिन लगता है कि यह $ str = (strlen ($ input) <8) होना चाहिए? ०। $ इनपुट: $ इनपुट;
JMX

@ जेएमएक्स वास्तव में, दोनों तरीके ठीक काम करते हैं। (मेरे लापता होने के बाद $मैंने अभी तय किया)
AbcAeffchen

1

मैंने इस प्रारूप का निर्माण करने के लिए यह सरल कार्य लिखा है: 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 


-1

यह पूरी तरह से काम करता है:

$number = 13246;
echo sprintf( '%08d', $number );

3
ऐसा लगता है कि मौजूदा उत्तरों का सिर्फ एक पुनरावृत्ति है।
पेंग

-1

आप हमेशा प्रकार की बाजीगरी का दुरुपयोग कर सकते हैं:

function zpad(int $value, int $pad): string {
    return substr(1, $value + 10 ** $pad);
}

यह अभ्यस्त काम करता है, तो या तो अपेक्षा के अनुरूप 10 ** pad > INT_MAXया value >= 10 * pad


-2
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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.