2011-02-23 18 views
111

Ben bir dize sadece bunasıl bir dizede tüm önde gelen sıfırları kaldırmak için

20300504 
234892839 
239074 

notu olacak böylece, başında sıfır kurtulmak nasıl

00020300504 
00000234892839 
000239074 

varsa Yukarıdaki sayı rastgele oluşturuldu.

+0

Bu üç ayrı dizgiler mi yoksa her bir sayıyı ayıran yeni satırlı bir dize mi? Sorunuzu düzenlerken, sayıları ayıran
'etiketinin olduğunu fark ettim; Aslında dizinin bir parçası mı? – erisco

cevap

340

ltrim:

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

+1 ikinci parametre hakkında bilgi sahibi olmadı, teşekkürler! – Czechnology

+2

^_ ^, teşekkürler lonesomeday, bu benim en çok 5 saat boyunca düşündüğüm problemimi çözüyor ... – Gerald

+1

Günümü sen yaptın! – Xavier

9
(string)((int)"00000234892839") 
+0

Sadece bir "(int)" 00009384783473 "' (rasgele sayı) denedim ve sonuç 2147483647 idi. Eğer bir float olarak yayınladım, ancak iyi çalışıyor gibi görünüyor. Garip – JamesHalsall

+0

kılavuzu "bir tamsayı büyüklüğünün platform bağımlı, her ne kadar yaklaşık iki milyar olan maksimum değer normal değerdir (32 bit imzalı)" – llamerr

+1

Garip değil. Php içinde Integers 2^31, 2147483647 kadar gider. Daha büyük sayılar için, lonesomeday'ın dize tabanlı çözümü kullanmanız gerekir. – awm

-2

sizi varsayarsak kaldırılacak bir run-on üç veya daha fazla sıfırların istiyor ve örnek bir dizedir:

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

Sen regex yapabilirsiniz Eğer varsayımlarım kapalı ise, ihtiyacınız olan şey uygun.

Bu yardım?

+0

Yanlış, üzgünüz. Bu aynı zamanda dizinin ortasından '000' kesecek. –

2

Ben preg_replace cevabı olduğunu düşünmüyorum .. eski iş parçacığı ama sadece bugün bunun için olsun. ltrim ve (int) oyuncuları kazanır.

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

Eğer regex'in başında^işlecini eklerseniz, bu geçerli bir çözüm olsa da. – twicejr

2

Regex değil doğru zaten önerilmiştir, fakat:

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

çıktı o zaman: Regex üzerinde

4523423400023402340240 

Amaç: dizesinin başlayan ^ sinyalleri ve + işaret sinyalleri önceki işareti daha fazla veya hiç. Bu nedenle, regex ^0+ bir dizenin başında tüm sıfırlarla eşleşir. dışında başka öneriye benzer

7

, gerçek sıfır yoketmek olmaz: insanlar böyle basit bir şey elde etmek için çok karmaşık yöntemler kullanıyor neden

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

bilmiyorum! Ve regex? Vaov! (Burada açıklandığı gibi: https://nabtron.com/kiss-code/): Burada

sen, en kolay ve en basit yol

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

echo $a; // will output 1 
+1

Bu daha basit bir çözüm gibi görünüyor, ancak diğer cevaplarda olduğu gibi herhangi bir boyuttaki ipi işlemiyor. Bir dizeden bir tamsayıya ve daha sonra bir dize olarak geri dönüyorsunuz - yalnızca dizeyi kısaltmak için daha basit. –

+1

İlginç, ancak tür dönüşümleri ile en iyi çözüm olup olmadığını bilmiyorum. – jonathanbell

3

Eğer değişkeni "+" ekleyebilirsiniz,

örnek:

$numString = "0000001123000"; 
echo +$numString; 
+0

Bu basit ve kolaydır –

-1

Ajay Kumar, en basit echo + $ numString ürününü sunuyor; Bunları kullanın:

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 

Aslında herhangi bir matematik fonksiyonu "dizesi" numarayı alıp böylece gibi davranır. Herhangi bir regex veya karşılaştırmalı işlevlerden çok daha basittir. Bunu php.net'de gördüm, nerede olduğunu hatırlamıyorum.

İlgili konular