2012-04-03 102 views
1

我有一個文本文件,其中包含項目編號(每行一個)。當我們的條形碼掃描儀掃描物品時,如果它存在於訂單中(它存儲在數組中......只有物品編號,沒有其他),它將被放入該文本文件中。需要與PHP數組中的確切字符串匹配的幫助

發生的事情是,如果我有兩個項目編號:

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查找整個字符串,並且在發現足夠好的東西(或者至少它認爲足夠好)時不放棄?

謝謝!

+0

你試過使用preg_match_all嗎? – mamadrood 2012-04-03 22:02:31

回答

3

沒有什麼不精確C0DB-9700-WP包含匹配C0DB-9700-W。什麼你要找的是確保你想要的字符串正則表達式本身是一個完整的字:

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

這正是我期待的!奇蹟般有效!謝謝!! – 2012-04-04 11:08:12

4

只需使用in_array

if (in_array($submitted, $file_array)) 

僅供參考,您的正則表達式失蹤的開始/結束錨(第二個參數必須是一個字符串,而不是一個數組):

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

對於項目的$file_array數組:

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

雖然在你的例子,它看起來像你的$file_array是一個字符串,所以你想要做的:

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