2011-01-14 13 views

Antwort

1

Verwenden preg_replace hierfür:

$text = "01,02,05,10,11,13,101"; 
echo preg_replace('/(?<=,|\b)0([0-9])/', "$1", $text); 

EDIT: in der Mitte von ihnen die Regex aktualisiert mit einem 0 mit Zahlen zu arbeiten. (d. h. 101)
Dank @BoltClock für die Korrektur der Regex.

Ausgang:

1,2,5,10,11,13,101 

Der Vorteil es auf diese Weise zu tun, ist, dass Sie nicht mit dem Drehen der gesamten Textes in ein Array zu verwirren haben zu tun, es/Looping durch ändern und es dann in zurück drehen Text.

+1

Ich habe darüber nachgedacht, auch diese Lösung zu veröffentlichen. Es ist sauberer und offensichtlicher.Aber beide funktionieren gut, wenn seine Liste immer so aussieht (keine Leerzeichen oder Nicht-Dezimalzahlen). – Tesserex

+0

Das funktioniert super. Vielen Dank. – John

+0

Was ist, wenn eine der Zahlen "101" ist? Es wird es "11" machen. – webbiedave

3

A Bit LofI, aber ltrim mit dem Trick sollte:

$zeroLess = ltrim('01', '0'); 

Alternativ (und mehr richtig im Wesentlichen), intval wie folgt verwendet werden:

$zeroLess = intval('01'); 
+0

Ich löschte meine Antwort, weil ich dachte, die einzige führende Null würde eine Oktalnotation anzeigen, was 'intval()' dazu bringen würde, etwas durcheinander zu bringen. Aber es sieht so aus, als wäre ich ein bisschen paranoid! 'ltrim()' funktioniert aber auch, also habe ich dich hochgestuft. – BoltClock

+0

Ltrim funktioniert, wenn es eine einzige Zahl ist, aber nicht in einer CSV .. Ich müsste es für jeden Wert in der CSV ausführen würde ich nicht? – John

+0

@John Werfen Sie einen Blick auf die Antwort von @ BoltClock - sie verwendet die Funktion intval als Rückruf zu array_map und löst das Problem sehr gut. –

10

Wenn sie alle Ganzzahlen sind, explodiere sie in ein Array und konvertiere alle in Ints.

$values = array_map('intval', explode(',', $csv)); 
+0

Wie meine, aber verdichtet. Ich mag das. – Tesserex

+0

+1 array_map ist genial. Sollte öfter verwendet werden, – fresskoma

+0

+1 Top Callback-Aktion. :-) –

2

Sie könnten alle Ihre Zahlen Ints Stimmen:

$list = explode(',', $csv_string); 
foreach ($list as &$n) $n = (int)$n; 
$fixed = implode(',', $list); 

Stellen Sie sicher, dass & in der foreach zu beachten, in dem Sie die aktuelle Liste Elemente können geändert werden.

2
<? 
$tdata=explode(',','01,02,05,10,11,13'); 
foreach ($tdata as $number) { 
    $csv[]=number_format($number,0); 
} 
$csv=implode(',',$csv); 
echo $csv; 

getestet: http://www.ideone.com/lrh8q

bearbeiten

an einigen der anderen Beiträgen Sehen, Gießen statt number_format int ist wahrscheinlich schneller.

Verwandte Themen