2011-01-14 74 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可能更快。