2011-01-14 73 views

回答

1

使用preg_replace此:

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

編輯:更新的正則表達式用在他們中間的0數字工作。 (即101)
感謝@BoltClock幫助修復正則表達式。

輸出:

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

的優勢,做這種方式是,你不必惹打開所有文字到一個數組,修改它/通過它循環,然後把它放回文本。

3

的位低保真,但使用 ltrim應該做的伎倆:

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

可選擇地(並且基本上更正確),則使用intval如下:

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

我刪除了我的答案,因爲我認爲單個前導零表示八進制表示法,導致`intval()`搞亂了。但看起來我有點偏執! `ltrim()`也可以,但是,我喜歡你。 – BoltClock 2011-01-14 19:36:36

+0

ltrim的工作原理是,如果它是一個單一的數字,但不是在CSV中。我必須爲CSV中的每個值運行它不是嗎? – John 2011-01-14 19:41:32

+0

@John看看@ BoltClock的答案 - 它使用intval函數作爲array_map的回調,並且非常整齊地解決了這個問題。 – 2011-01-14 19:42:37

10

如果它們都是整數,則將其分解爲數組並將其全部轉換爲整數。

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

您可以將所有你的號碼轉換爲整數:

$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

編輯

縱觀一些其他職位,鑄造爲int,而不是number_format可能更快。