1

アイテム番号 (1 行に 1 つ) を含むテキスト ファイルがあります。アイテムがバーコード スキャナーでスキャンされると、このテキスト ファイルに配置されます (配列に格納されている場合は、配列に格納されます...アイテム番号のみ、他には何もありません)。

何が起こっているかというと、2 つの項目番号がある場合:

C0DB-9700-W C0DB-9700-WP

最初にアイテム C0DB-9700-W をスキャンすると、2 番目のアイテムを問題なくスキャンできますが、最初に 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))

参考までに、正規表現には開始/終了アンカーがありませんでした (そして、2 番目の引数は配列ではなく文字列である必要があります):

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

の一致を含むことについて不正確なことは何もありません。探しているのは、必要な文字列が単語全体であることを保証する正規表現です。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 に答える