পিএইচপি-তে শীর্ষস্থানীয় শূন্যগুলির সাথে একটি সংখ্যা ফর্ম্যাট করা


600

আমার একটি ভেরিয়েবল রয়েছে যার মান রয়েছে 1234567

আমি এটিতে অবশ্যই 8 টি সংখ্যা রাখতে চাই 01234567

তার জন্য কি কোনও পিএইচপি ফাংশন আছে?

উত্তর:


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 সংখ্যারও কম সংখ্যার জন্য নেতৃস্থানীয় শূন্যগুলিও স্থাপন করবে। SELECTএইচটিএমএলে একটি সময় অঞ্চল তৈরি করার জন্য দুর্দান্ত ।
ভলমাইক

2
বর্তমান সংস্করণ (7.1) এবং নিম্ন জন্য sprintf( 3v4l.org/junvv/perf#output ) চেয়ে একটি সামান্য বিট দ্রুততর str_pad( 3v4l.org/cliNP/perf#output )
Vladyslav Startsev

কোনও নেতিবাচক সংখ্যার জন্য যখন শীর্ষস্থানীয় শূন্যের প্রয়োজন হতে পারে ... তখন তিনটি অঙ্কের একটি লিফট-অফ কাউন্টার? টি -010, টি -009, টি -008 ইত্যাদি
টিআরটি 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 আপনার যা প্রয়োজন তা হল

উপরের লিঙ্ক করা পৃষ্ঠা থেকে সম্পাদনা করুন ( ডাউনভোটদের দ্বারা কোনওভাবে অনুরোধ করা হয়েছে ) এখানে একটি শূন্য-প্যাডযুক্ত পূর্ণসংখ্যার নমুনা দেওয়া হয়েছে:

<?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

বিটিডব্লিউ: আমার পরীক্ষাটিও বলেছে যে এটির sprintfচেয়ে একটু দ্রুত str_pad। আমি পিএইচপি 5.6 দিয়ে সমস্ত পরীক্ষা করেছি।

সম্পাদনা: Altough substrসংস্করণ এখনও খুব দ্রুত (পিএইচপি 7.2), এটি ক্ষেত্রে নষ্ট হয়ে গেছে মনে করা হয় আপনার ইনপুট দৈর্ঘ্য আপনাকে প্যাড করতে চান চেয়ে দীর্ঘতর হতে পারে। উদাহরণস্বরূপ আপনি 3 টি সংখ্যায় প্যাড করতে চান এবং আপনার ইনপুটটির 4 টির চেয়ে বেশি substr('0000' . '1234', -3) = '234'কেবল শেষ 3 টি সংখ্যার ফলাফল হবে


ধন্যবাদ, আমি আপনার প্রকরণটি পছন্দ করি তবে মনে হয় এটি $ str = (স্ট্রেন ($ ইনপুট) <8) হওয়া উচিত? 0 $ ইনপুট: $ ইনপুট;
জেএমএক্স

@ জেএমএক্স আসলে, দুটি উপায়ই ঠিকঠাক কাজ করে work (আমার নিখোঁজ পাশে $আমি ঠিক স্থির করেছি)
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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.