स्ट्रिंग में शून्य-पैड अंक


126

मुझे एकल आंकड़े (1 से 9) से (01 से 09) की आवश्यकता है। मैं एक तरह से सोच सकता हूं लेकिन इसका बड़ा और बदसूरत और बोझिल। मुझे यकीन है कि कुछ संक्षिप्त तरीके होने चाहिए। कोई सुझाव

जवाबों:


214

सबसे पहले, आपका वर्णन भ्रामक है। Doubleएक अस्थायी बिंदु डेटा प्रकार है। आप संभवतः एक स्ट्रिंग में अग्रणी शून्य के साथ अपने अंकों को पैड करना चाहते हैं। निम्नलिखित कोड है कि:

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

अधिक जानकारी के लिए, के प्रलेखन को देखें sprintf


@KonradRudolph यदि मैंने digitउस समय दिए गए पूर्णांक के मान के रूप में पास किया है , यदि उस समय स्ट्रिंग के रूप में पास करें तो समस्या नहीं है
हिरेन भुट

@HirenBhut नहीं, मैं 100% निश्चित हूं कि यह काम करता है। प्रलेखन ऐसा कहता है। मैंने इसे आपके लिए भी परीक्षण किया: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
कोनराड रुडोल्फ

@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);

पीएचपी पर बेंचमार्क 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.