2011-01-14 29 views

答えて

1

使用preg_replace

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

EDIT:はそれらの中間に0と数字で動作するように正規表現を更新しました。 (つまり101)
正規表現の修正を支援するために@ BoltClockに感謝します。

出力:

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

利点この方法は、あなたがそれをループ/それを修正し、配列にすべてのテキストを回し、その後にそれを後戻りを台無しにする必要はありませんで、それをやってするにテキスト。テスト

+1

私もこのソリューションの投稿を検討していました。それはより清潔で、その意図がはっきりしています。しかし、彼のリストが常にそのように見えたら(空白も10進数もない)、どちらもうまくいきます。 – Tesserex

+0

これは素晴らしい動作します。ありがとう。 – John

+0

数字のいずれかが「101」の場合はどうなりますか?それは '11'になります。 – webbiedave

3

ビットローファイが、トリック行う必要 ltrimを使用して:、(実質的により正しく)

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

あるいは

を次のようにintvalを使用:

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

私は1つの先行ゼロが8進表記を示し、 'intval()'がうんざりになると思ったので私の答えは削除されました。しかし、私は少し編集的だったように見えます!しかし、 'ltrim()'もうまくいくので、私はあなたを上回りました。 – BoltClock

+0

ltrimはCSVではなく、単一の番号であれば動作します。私はCSVの各値に対してそれを実行する必要がありますか? – John

+0

@John @ BoltClockの答えを見てください。これはintval関数をarray_mapへのコールバックとして使用し、問題をきれいに解決します。 –

10

すべてが整数の場合は、配列に分解してすべてをintに変換します。

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

鉱山と同じですが凝縮しています。私はそれが好きです。 – Tesserex

+0

+1 array_mapは素晴らしいです。方法を頻繁に使用する必要があります。 – fresskoma

+0

+1トップのコールバックアクション。 :-) –

2

あなたはint型にすべての数字をキャストすることができます:

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

は、あなたが実際のリスト要素を変更できますforeachの、中&ことに注意してください。このため

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

http://www.ideone.com/lrh8q

編集

、他の記事のいくつかを見てみるの代わりをnumber_formatのint型にキャストすることは、おそらく高速です。

関連する問題