স্ট্রিংয়ে সমস্ত নেতৃস্থানীয় শূন্যস্থান কীভাবে সরিয়ে ফেলা যায়


163

আমার যদি স্ট্রিং থাকে

00020300504
00000234892839
000239074

আমি কীভাবে অগ্রণী শূন্যগুলি থেকে মুক্তি পেতে পারি যাতে আমার কেবল এটিই থাকে

20300504
234892839
239074

নোট করুন যে উপরের নম্বরটি এলোমেলোভাবে উত্পন্ন হয়েছিল।


এই তিনটি পৃথক স্ট্রিং, বা প্রতিটি সংখ্যা পৃথক করে নতুন লাইনের সাথে একটি স্ট্রিং? আপনার প্রশ্নটি সম্পাদনা করার সময় আমি লক্ষ্য করেছি যে আপনি <br>সংখ্যাগুলি পৃথক করে ট্যাগ করেছেন; তারা আসলে আপনার স্ট্রিং অংশ?
এরিস্কো

উত্তর:


458

ltrim:

$str = ltrim($str, '0');

2
ক্যাভেটআরটিআর: = '0'। এই উত্তরের উপর ভিত্তি করে আমার উত্তরে সম্বোধন করা হয়েছে।
মাইক ওয়েয়ার

কেন overcomplicate জিনিস? এবং মাইকে এটি $ str + = 0; যেমনটি এখানে ব্যাখ্যা করা হয়েছে: nabtron.com/kiss-code
নবেল খান

@ নাবিলখান এটি প্রশ্নের উত্তর দেবে না, যা স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করতে বলে না । কেন এটি এত বড় সমাধান নয় এর জন্য সভিস্টাকের উত্তরের মন্তব্যগুলি দেখুন।
নিঃসঙ্গ দিন

@ একাকী দিন আপনি তাঁর প্রশ্নটি যত্ন সহকারে পড়া উচিত যেখানে তিনি উল্লেখ করেছেন: "নোট করুন যে উপরের নম্বরটি এলোমেলোভাবে উত্পন্ন হয়েছিল।" সুতরাং তারা ইতিমধ্যে পূর্ণসংখ্যক :)
নবেল খান

1
সতর্কতা: এটি '0' কে '' তে পরিণত করবে
গুজ

12
(string)((int)"00000234892839")

আমি কেবল একটি (int) "00009384783473"(এলোমেলো সংখ্যা) চেষ্টা করেছি এবং আমার ফলাফলটি ছিল 2147483647 I তবে আমি যদি এটি একটি ফ্লোট হিসাবে কাস্ট করি তবে এটি ঠিক আছে বলে মনে হচ্ছে। অদ্ভুত
জেমসহালসাল

ম্যানুয়াল বলে "একটি পূর্ণসংখ্যা আকার প্ল্যাটফর্ম-নির্ভরশীল, যদিও দুই বিলিয়ন সম্পর্কে সর্বোচ্চ মান চলিত মান (32 বিট স্বাক্ষর যে) হল" যে
llamerr

1
অদ্ভুত নয়। পিএইচপি-তে পূর্ণসংখ্যার পরিমাণ 2 to 31 পর্যন্ত যায় যা 2147483647 larger
এএমএম

1
ভাসাতে কাস্ট করা কাজতে প্রদর্শিত হতে পারে তবে কিছু সময় আপনি রাউন্ডঅফ ত্রুটি পাবেন।
এএমএম

1
লুপ স্টেটমেন্ট ব্যবহার করে প্রতিটি স্ট্রিংকে মূল্যায়ন করার ধারণা সম্পর্কে কীভাবে যে এটি যখন কোনও শূন্য নম্বরের (বা স্ট্রিং) এ পৌঁছায়, তখন সেই অঙ্কটির সূচকটি পাওয়া যাবে এবং পূর্ববর্তী সমস্ত শূন্যের পরে স্ট্রিং প্রতিধ্বনিত হবে যা শুরু হবে প্রথম অ শূন্য মানের সাথে ..
জেরাল্ড

10

লোকেরা কেন এত সাধারণ জিনিস অর্জনের জন্য এত জটিল পদ্ধতি ব্যবহার করছে জানি না! এবং রেজেক্স? কি দারুন!

আপনি এখানে যান, সবচেয়ে সহজ এবং সহজ উপায় (এখানে ব্যাখ্যা হিসাবে: https://nabtron.com/kiss-code/ ):

$a = '000000000000001';
$a += 0;

echo $a; // will output 1

2
এটি একটি সহজ সমাধানের মতো বলে মনে হচ্ছে তবে এটি অন্যান্য উত্তরগুলির মতো কোনও আকারের স্ট্রিং পরিচালনা করে না। আপনি স্ট্রিং থেকে একটি পূর্ণসংখ্যায় রূপান্তর করছেন এবং তারপরে স্ট্রিং হিসাবে ফিরে যাচ্ছেন - স্ট্রিংটিকে কেবল ছোট করার জন্য সহজ।
মাইক ওয়েয়ার

1
আকর্ষণীয়, তবে ধরণের রূপান্তরগুলির সাথে এটি সেরা সমাধান কিনা তা আমি জানি না।
জোনাথনবেল

1
দয়া করে এটি করবেন না ... এই কারণেই পিএইচপি একটি খারাপ প্রতিনিধি পায়
ড্যান এফ।

9

অন্য একটি পরামর্শের মতো, প্রকৃত শূন্যকে বাদ দেবে না:

if (ltrim($str, '0') != '') {
    $str = ltrim($str, '0');
} else {
    $str = '0';
}

বা প্রস্তাবিত হিসাবে (পিএইচপি 5.3 হিসাবে), শর্টহ্যান্ড টার্নারি অপারেটর ব্যবহার করা যেতে পারে:

$str = ltrim($str, '0') ?: '0'; 

1
$str = ltrim($str, '0') ?: '0'; - নিরর্থক ট্রিম কল নেই।
মিকম্যাকুসা


3

রেজেক্স ইতিমধ্যে প্রস্তাবিত হয়েছিল, তবে সঠিকভাবে নয়:

<?php
    $number = '00000004523423400023402340240';
    $withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
    echo $withoutLeadingZeroes;
?>

আউটপুট তখন হয়:

4523423400023402340240

রেজেক্সে ব্যাকগ্রাউন্ড: ^স্ট্রিংয়ের সূচনা সংকেত এবং +সাইন সিগন্যালগুলি পূর্ববর্তী চিহ্নগুলির বেশি বা কোনওটিই নয়। সুতরাং, রেজেক্স ^0+একটি স্ট্রিংয়ের শুরুতে সমস্ত শূন্যের সাথে মেলে।


preg_replace() expects at least 3 parameters, 2 given
তারংপি

2

আমি মনে করি না পূর্ববর্তী স্থানটি উত্তর .. পুরাতন থ্রেড তবে আজ এটি সন্ধানের জন্যই ঘটে। ltrim এবং (int) ingালাই বিজয়ী।

<?php
 $numString = "0000001123000";
 $actualInt = "1123000";

 $fixed_str1 = preg_replace('/000+/','',$numString);
 $fixed_str2 = ltrim($numString, '0');
 $fixed_str3 = (int)$numString;

 echo $numString . " Original";
 echo "<br>"; 
 echo $fixed_str1 . " Fix1";
 echo "<br>"; 
 echo $fixed_str2 . " Fix2";
 echo "<br>";
 echo $fixed_str3 . " Fix3";
 echo "<br>";
 echo $actualInt . " Actual integer in string";

 //output

 0000001123000 Origina
 1123 Fix1
 1123000 Fix2
 1123000 Fix3
 1123000 Actual integer in tring

আপনি যদি রেজেক্সের শুরুতে ^ অপারেটরটি যুক্ত করেন তবে এটি বৈধ সমাধান solution
twojr

0

আমি এইভাবে স্থির।

এটা খুবই সাধারণ. কেবল একটি স্ট্রিং পাস করুন এটির স্ট্রিংয়ের শূন্য প্রারম্ভটি।

function removeZeroString($str='')
{
    while(trim(substr($str,0,1)) === '0')
    {
        $str = ltrim($str,'0');
    }
    return $str;
}

-1

অজয় কুমার সহজ প্রতিধ্বনি + $ num স্ট্রিং সরবরাহ করেন; আমি এগুলি ব্যবহার করি:

echo round($val = "0005");
echo $val = 0005;
    //both output 5
echo round($val = 00000648370000075845);
echo round($val = "00000648370000075845");
    //output 648370000075845, no need to care about the other zeroes in the number
    //like with regex or comparative functions. Works w/wo single/double quotes

প্রকৃতপক্ষে কোনও গণিতের ফাংশন "স্ট্রিং" থেকে নম্বরটি নেবে এবং এর মতো আচরণ করবে treat এটি কোনও রেজেক্স বা তুলনামূলক ফাংশনগুলির তুলনায় অনেক সহজ। আমি php.net এ দেখেছি, মনে নেই কোথায়।


-2

ধরে নিচ্ছেন আপনি তিন বা ততোধিক জিরো অপসারণ করতে চান এবং আপনার উদাহরণটি একটি স্ট্রিং:

    $test_str ="0002030050400000234892839000239074";
    $fixed_str = preg_replace('/000+/','',$test_str);

আমার অনুমানগুলি বন্ধ থাকলে আপনি কী প্রয়োজন তা আপনি রেজেক্স প্যাটার্নটিকে ফিট করতে পারেন।

এই সাহায্য?


1
ভুল, দুঃখিত। এটি স্ট্রিংয়ের মাঝামাঝি থেকে '000' কেটে দেবে।
ফিলিপ ওভারটোনসিংগার রাইড্লো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.