2011-12-29 78 views
0

编辑:不寻找任何人为我写代码,只是寻找建议,以最好的方式实现我想要做的事情。检查一个变量是否是一个CSV字符串中的值

我可以想到这样做的几种方法,但我只是想知道是否有更优雅的方式。

例如,我想知道,如果 “ABC” 是 “猫,狗,ABC,XYZ”

这是我怎么以前做过......

in_array($key, explode(',', $value)); 

(strpos($value, ','.$key) !=== FALSE) || (strpos($value, $key.',') !=== FALSE); 

preg_match('/(\,'.$key.'|'.$key.'\,)/', $value) !== 0 // Untested, but.. just for the general idea. 

任何更好的方式,智慧的话,堆栈溢出?

+2

提供更多信息。你的问题标题看起来不对。 – 2011-12-29 17:22:55

+0

问题是什么? – 2011-12-29 17:25:36

+0

@JasonMcCreary我已经编辑了问题的标题和正文。混淆抱歉 - 这开始是一个完全不同的问题,我回答了自己,导致了这个问题,当我编辑问题以寻求不同的东西时,情况变得混乱起来。 – 2011-12-29 17:46:02

回答

2

第一种方法完全相同的值可能是最可靠/最准确,最容易阅读/理解的。但是,您应该使用str_getcsv()而不是explode(),因为逗号可能位于逗号分隔的数据中。例如其中分解:

$key = 'uh, oh'; 
$value = 'foo,"uh, oh",bar'; 

其它两种方法是容易出错的,并且具有边缘的情况下引起的假阳性。他们非常不可靠。

2

正如杰森所说,你的标题似乎有点不对。但是......这是中并行于你给的例子(5.3+只):

in_array($key, str_getcsv($value)); 

此检查是否有任何列的行$value价值是$key

+1

用于引用'str_getcsv()' – 2011-12-29 18:05:05

相关问题