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


Need assistance matching an exact string in PHP array

我有一个文本文件,其中包含项目编号(每行一个)。当我们的条形码扫描仪扫描一个项目时,如果它在订单中存在,它就会被放入这个文本文件中(它存储在一个数组中……只有项目编号,没有其他内容)。

发生的事情是,如果我有两个项目编号:

C0DB-9700-WC0DB-9700-WP

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

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

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

我转而使用:

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

我认为通过使用preg_match我可以克服这个问题,但显然不是。我只想让PHP对照数组中的项目(我从文件中得到的)检查我给它的EXACT字符串,看看它是否已经被扫描过。这在我心里没那么难,但显然我错过了一些东西。我如何说服PHP寻找整个字符串,当它找到足够好的东西(或者至少它认为足够好的)时不放弃?

谢谢!

只需使用in_array:

if (in_array($submitted, $file_array))

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

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

关于包含C0DB-9700-W匹配项的C0DB-9700-WP,没有任何不精确的。你要找的是一个正则表达式,它可以确保你想要的字符串本身就是一个完整的单词:

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

对于项目数组$file_array:

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

尽管在您的示例中,$file_array看起来是一个字符串,所以您希望执行以下操作:

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