1

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

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

C0DB-9700-W C0DB-9700-WP

如果我先扫描 C0DB-9700-W 项目,那么我可以正常扫描第二个项目,但如果我先扫描 C0DB-9700-WP,它认为我已经扫描了 C0DB-9700-W,因为该项目是我已经扫描过的项目的前缀。

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

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

我改用:

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

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

谢谢!

4

3 回答 3

5

只需使用in_array

if (in_array($submitted, $file_array))

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

preg_match('/^'.$submitted.'$/', $subject)
于 2012-04-03T22:01:41.393 回答
3

包含匹配 for 并没有什么不准确的地方。您正在寻找的是一个正则表达式,它确保您想要的字符串本身就是一个完整的单词:C0DB-9700-WPC0DB-9700-W

if (preg_match('/\\b'.$submitted.'\\b/', $file_array)) {
于 2012-04-03T22:02:08.803 回答
1

对于一组项目$file_array

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

尽管在您的示例中,您的示例看起来像是$file_array一个字符串,因此您希望这样做:

$file_array = explode("\n", $file_array);
于 2012-04-03T22:04:58.740 回答