需要帮助匹配PHP数组中的确切字符串

时间:2012-04-03 21:59:39

标签: php arrays preg-match strpos

我有一个文本文件,其中包含项目编号(每行一个)。当我们的条形码扫描仪扫描一个项目时,它会被放入这个文本文件中,如果它存在于顺序中(存储在一个数组中......只有项目编号,没有别的)。

如果我有两个项目编号,那么会发生什么:

C0DB-9700-W C0DB-9700-WP

如果我首先扫描C0DB-9700-W项目,那么我可以很好地扫描第二项,但如果我先扫描C0DB-9700-WP,它认为我已经扫描了C0DB-9700-W,因为那样item是我已经扫描过的项目的前缀。

我知道strpos只检查第一次出现。我使用以下代码:

if (strpos($file_array, $submitted ) !==FALSE) {

我转而使用:

if (preg_match('/'.$submitted.'/', $file_array)) {

我认为通过使用preg_match我可以克服这个问题,但显然不是。我只是想让PHP检查我给它的EXACT字符串对阵数组中的项目(我从文件中获取),看它是否已经被扫描过。这在我脑海里并不难,但显然我在这里遗漏了一些东西。我怎样才能哄骗PHP寻找整个字符串而不是放弃它找到足够好的东西(或者至少它认为足够好的东西)?

谢谢!

3 个答案:

答案 0 :(得分:5)

只需使用in_array

if (in_array($submitted, $file_array))

仅供参考,您的正则表达式缺少开始/结束锚点(第二个参数需要是字符串,而不是数组):

preg_match('/^'.$submitted.'$/', $subject)

答案 1 :(得分:3)

C0DB-9700-WP包含与C0DB-9700-W匹配的内容不精确。您正在寻找的是一个正则表达式,它可以确保您想要的字符串本身就是一个完整的单词:

if (preg_match('/\\b'.$submitted.'\\b/', $file_array)) {

答案 2 :(得分:1)

对于项目数组$file_array

if (in_array($submitted, $file_array)) {
    // Do something...
}

虽然在您的示例中,您的$file_array似乎是一个字符串,但您希望这样做:

$file_array = explode("\n", $file_array);