我有一个文本文件,其中包含项目编号(每行一个)。当我们的条形码扫描仪扫描一个项目时,它会被放入这个文本文件中,如果它存在于顺序中(存储在一个数组中......只有项目编号,没有别的)。
如果我有两个项目编号,那么会发生什么:
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寻找整个字符串而不是放弃它找到足够好的东西(或者至少它认为足够好的东西)?
谢谢!
答案 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);