2013-04-10 68 views
2

我有一个脚本我正在为自动化任务工作,所以我并不真正担心干净的代码,因为它将只用一次。php只允许数字数据和逗号,删除重复的逗号

该脚本读取平面文件并将信息存储到数组中,该数组稍后将用于从数据库中读取某些内容。

但是,我只想要数值数据,所以我使用了preg_replace()和逗号。我的代码如下。

这些是使用循环从平面文件中的值中读取的。

$store = array(); 
$store[] = 111; 
$store[] = 2; 
$store[] = 4; 
$store[] = 55; 
$store[] = 66; 
$store[] = 'Kilory'; 
$store[] = 9090; 

$theList[$i] = preg_replace('/[^0-9,]/u', '', implode(',', $store)); 
unset($store); 

这给了我的结果是0,2,4,55,66,,9090。如果我尝试使用这些信息在mysql IN()语句中使用,由于有两个逗号相邻,它会向我吐出一个错误。删除相邻的重复项的最佳方法是什么?

谢谢!

回答

3

包含标题和尾随逗号的重复逗号,您可以用$string = trim(preg_replace('#,{2,}#', ',', $string), ',');删除。

+0

...如果有3个逗号? – 2013-04-10 15:44:49

+0

他确实递归地说。如果你有三个逗号,并且你使用了他的功能,那么你将剩下两个......这将在下一个回合中变成一个。 – 2013-04-10 15:46:17

+0

固定,对不起。 (但他只说了两倍,而不是三倍) – bwoebi 2013-04-10 15:46:25

0

当循环访问store[]值时,使用is_numeric()函数检查值是否为数字。如果是,则添加逗号,如果不是,则不要。

manual

+0

更快。 'is_nan()'检查'=== NaN'。你的意思是'is_numeric()'。 – bwoebi 2013-04-10 15:49:27

+0

@bwoebi谢谢。 – verbumSapienti 2013-04-10 15:51:50

1

PHP提供了过滤功能,为此目的:

$store = array(); 
$store[] = 111; 
$store[] = 2; 
$store[] = 4; 
$store[] = 55; 
$store[] = 66; 
$store[] = 'Kilory'; 
$store[] = 9090; 

$theList[$i] = implode(',', array_filter($store, 'is_numeric')); 
unset($store); 
+0

+1毫无疑问是一种更好的方式,但并不完全相同,例如小数点和部分数字值:) – 2013-04-10 16:57:54

+0

您可以随时将“is_numeric”回调替换为更适合当前用例的回调。 – nibra 2013-04-11 14:52:04