0

文字列を配列と比較して、文字列が配列に存在するかどうかを確認しようとしています。存在する場合は、'配列'にエコーします。配列の最後のエントリで必要なだけエコーを機能させることができます。

foreach($array as $key => $value) {
    foreach($entries as $entry) {
        if($entry == $value) echo 'in array 1';
    }
    if (in_array($value, $entries)) {
        echo 'in array 2';
    }
    if(isset($entries[$value])) {
        echo 'in array 3';
    }
}

'inarray1'および'inarray 2'のエコーは$entries配列の最後のエントリでのみ機能し、'inarray3'のエコーはまったく機能しません。

それはおそらく愚かなことですが、私はそれを見ていません...

編集:

これが配列のいくつかの例です

$entries =
array(5) {
  [0]=>
  string(14) "example text 1"
  [1]=>
  string(14) "example text 2"
  [2]=>
  string(14) "example text 3"
  [3]=>
  string(14) "example text 4"
  [4]=>
  string(14) "example text 5"
}

$array = 
array(5) {
  [0]=>
  string(14) "example text 1"
  [1]=>
  string(14) "example text 2"
  [2]=>
  string(14) "example text 3"
  [3]=>
  string(14) "example text 7"
  [4]=>
  string(14) "example text 8"
}

だから今私がするとき

foreach($array as $key => $value)

$valueには$arrayの値が含まれている必要があり、これらの値をそれぞれ比較して、$entries配列に存在するかどうかを確認する必要があります。もしそうなら、idは'配列'にエコーしたい

編集2:

違いが生じる場合は、情報がログから取得されているため、$entries配列がfile()によって作成されています。新しいファイルが追加されるたびにログに記録されます。次に、受信ファイルをログと比較し、それらがすでに追加されているかどうかを判断し、追加されていない場合は追加します。

4

2 に答える 2

2

あなたのコードは、2 つの配列の共通点をチェックするだけのようで、3 つの異なる方法でそれを行います。ある理由が別の理由で機能するかどうかは、データによって異なります。そこのコンパレータ==in_arrayisset動作が異なります。さらにコメントするには、配列構造/サンプルデータを確認する必要があります。

ただし、現在行っていること、2 つの配列の共通要素を見つけることは、array_diff()またはを使用して簡単に実行できます。array_intersect()

あなたの最初の行 -

文字列を配列と比較して、文字列が配列に存在するかどうかを確認しようとしています。存在する場合は「配列内」をエコーし​​ます。

in_arrayのように を 1 回呼び出すだけで実現できます。in_array('cat', array('cat', 'dog', 'mouse'));

于 2012-11-14T18:29:02.127 に答える
1

$valueキーではありません。

値は「値」です。

あなたが本当にあなたがしていることをしたいのなら、あなたはできる:

if(isset(array_flip($entries)[$value])) {
    echo 'in array 3';
}

ただし、同じ値を持つ複数の要素がある場合は機能しない可能性があります。

DOC を参照

于 2012-11-14T17:29:18.603 に答える