Cara menghapus semua nol terkemuka dalam sebuah string

163

Jika saya punya string

00020300504
00000234892839
000239074

bagaimana saya bisa menyingkirkan nol terkemuka sehingga saya hanya akan memiliki ini

20300504
234892839
239074

perhatikan bahwa angka di atas dihasilkan secara acak.

Gerald
sumber
Apakah ketiga string ini terpisah, atau satu string dengan baris baru memisahkan setiap angka? Saya perhatikan ketika mengedit pertanyaan Anda bahwa Anda memiliki <br>tag yang memisahkan angka-angka; apakah mereka sebenarnya bagian dari tali Anda?
erisco

Jawaban:

458

ltrim:

$str = ltrim($str, '0');
lonesomeday
sumber
2
Peringatan $ str: = '0'. Ditujukan dalam jawaban saya, berdasarkan jawaban ini.
Mike Weir
mengapa terlalu rumit? dan mike itu $ str + = 0; seperti yang dijelaskan di sini: nabtron.com/kiss-code
Nabeel Khan
@NabeelKhan Itu tidak akan menjawab pertanyaan, yang tidak meminta untuk mengubah string ke integer. Lihat komentar pada jawaban Svisstack untuk mengapa ini bukan solusi yang bagus.
lonesomeday
@lonesomeday Anda harus membaca pertanyaannya dengan cermat di mana ia menyebutkan: "perhatikan bahwa angka di atas dihasilkan secara acak." jadi mereka sudah bilangan bulat :)
Nabeel Khan
1
Perhatian: Ini akan mengubah '0' menjadi ''
Goose
12
(string)((int)"00000234892839")
Svisstack
sumber
Saya baru saja mencoba (int) "00009384783473"(angka acak) dan hasil saya adalah 2147483647. Namun jika saya melemparkannya sebagai pelampung, sepertinya berfungsi dengan baik. Strange
JamesHalsall
manual mengatakan bahwa "Ukuran integer bergantung pada platform, meskipun nilai maksimum sekitar dua miliar adalah nilai biasa (yang ditandatangani 32 bit)"
llamerr
1
Tidak aneh. Integer dalam php naik ke 2 ^ 31, yaitu 2147483647. Untuk angka yang lebih besar, Anda harus menggunakan solusi berbasis string lonesomeday.
awm
1
Casting to float mungkin terlihat berhasil, tetapi pada titik tertentu Anda akan mendapatkan kesalahan pembulatan.
awm
1
bagaimana dengan ide mengevaluasi masing-masing string dengan menggunakan pernyataan loop, bahwa ketika sampai ke angka nol (atau string), itu akan mendapatkan indeks dari digit itu dan menjatuhkan semua nol sebelumnya kemudian gema string yang dimulai dengan nilai bukan nol pertama ..
Gerald
10

Tidak tahu mengapa orang menggunakan metode yang begitu rumit untuk mencapai hal yang begitu sederhana! Dan regex? Wow!

Ini dia, cara termudah dan paling sederhana (seperti yang dijelaskan di sini: https://nabtron.com/kiss-code/ ):

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

echo $a; // will output 1
Nabeel Khan
sumber
2
Ini sepertinya solusi yang lebih sederhana, tetapi tidak menangani ukuran string apa pun seperti jawaban lainnya. Anda mengonversi dari string ke integer dan kemudian kembali sebagai string - lebih sederhana untuk hanya mempersingkat string.
Mike Weir
1
Menarik, tetapi saya tidak tahu apakah itu solusi terbaik dengan jenis konversi.
Jonathanbell
1
Tolong jangan lakukan ini ... ini sebabnya PHP mendapat reputasi buruk
Dan F.
9

Mirip dengan saran lain, kecuali tidak akan menghapus nol aktual:

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

Atau seperti yang disarankan (pada PHP 5.3), operator ternary steno dapat digunakan:

$str = ltrim($str, '0') ?: '0'; 
Mike Weir
sumber
1
$str = ltrim($str, '0') ?: '0'; - tidak ada panggilan trim yang berlebihan.
mickmackusa
8

Anda dapat menambahkan "+" dalam variabel Anda,

contoh:

$numString = "0000001123000";
echo +$numString;
Anthony Kal
sumber
3

Regex sudah diusulkan, tetapi tidak dengan benar:

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

output kemudian:

4523423400023402340240

Latar belakang pada Regex: ^sinyal awal dari string dan +sinyal lebih atau tidak sama sekali dari tanda sebelumnya. Oleh karena itu, regex ^0+cocok dengan semua nol pada awal string.

Fuujin
sumber
preg_replace() expects at least 3 parameters, 2 given
TarangP
2

Saya tidak berpikir preg_replace adalah jawabannya .. utas lama tetapi kebetulan mencari ini hari ini. Hanya casting dan int adalah pemenangnya.

<?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
Elcast
sumber
Jika Anda menambahkan operator ^ di awal regex, itu adalah solusi yang valid.
twicejr
0

Saya Tetap dengan cara ini.

ini sangat sederhana. hanya melewatkan string, hilangkan nol mulai dari string.

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

Ajay Kumar menawarkan gema paling sederhana + $ numString; Saya menggunakan ini:

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

Sebenarnya setiap fungsi matematika akan mengambil nomor dari "string" dan memperlakukannya seperti itu. Ini jauh lebih sederhana daripada fungsi regex atau komparatif. Saya melihat itu di php.net, tidak ingat di mana.

Jorge Garza
sumber
-2

Dengan asumsi Anda ingin run-on dari tiga nol atau lebih dihapus dan contoh Anda adalah satu string:

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

Anda dapat membuat pola regex sesuai dengan yang Anda butuhkan jika asumsi saya tidak aktif.

Bantuan ini?

Akan
sumber
1
Salah, maaf Ini juga akan memotong '000' dari tengah string.
Filip OvertoneSinger Rydlo